← Назад ко всем вопросам

Чем отличается point-to-point от publish/subscribe?

1️⃣ Как кратко ответить

Point-to-point — это модель обмена сообщениями, где сообщение отправляется от одного отправителя к одному получателю через очередь. Publish/subscribe — это модель, где сообщение отправляется от одного отправителя к множеству подписчиков через тему. В point-to-point каждый получатель получает уникальное сообщение, а в publish/subscribe все подписчики получают копии одного и того же сообщения.

2️⃣ Подробное объяснение темы

В системах обмена сообщениями используются различные модели для передачи данных между компонентами. Две наиболее распространенные модели — это point-to-point и publish/subscribe. Каждая из них имеет свои особенности и применяется в разных сценариях.

Point-to-Point (P2P)

В модели point-to-point сообщение передается от одного отправителя к одному получателю. Это достигается с помощью очереди сообщений. Отправитель помещает сообщение в очередь, и один из получателей извлекает его. После извлечения сообщение удаляется из очереди, и другие получатели не могут его получить. Это гарантирует, что каждое сообщение будет обработано только одним получателем.

Пример использования: система обработки заказов, где каждый заказ должен быть обработан только одним сотрудником.

// Пример кода на Java с использованием JMS (Java Message Service)
​
// Создание соединения с брокером сообщений
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
​
// Создание сессии для отправки/получения сообщений
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
​
// Создание очереди
Queue queue = session.createQueue("OrderQueue");
​
// Создание отправителя сообщения
MessageProducer producer = session.createProducer(queue);
​
// Создание и отправка сообщения
TextMessage message = session.createTextMessage("New Order");
producer.send(message);
​
// Закрытие соединения
connection.close();
  • ConnectionFactory и Connection создают соединение с брокером сообщений.
  • Session используется для создания очереди и отправки сообщений.
  • Queue представляет собой очередь, в которую отправляются сообщения.
  • MessageProducer отправляет сообщения в очередь.
  • TextMessage — это тип сообщения, которое отправляется.

Publish/Subscribe (Pub/Sub)

В модели publish/subscribe сообщение отправляется от одного отправителя к множеству подписчиков. Это достигается с помощью темы (topic). Отправитель публикует сообщение в тему, и все подписчики, подписанные на эту тему, получают копии сообщения. Это позволяет нескольким получателям одновременно получать одно и то же сообщение.

Пример использования: система уведомлений, где одно событие должно быть получено всеми заинтересованными сторонами.

// Пример кода на Java с использованием JMS (Java Message Service)
​
// Создание соединения с брокером сообщений
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
​
// Создание сессии для отправки/получения сообщений
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
​
// Создание темы
Topic topic = session.createTopic("NewsTopic");
​
// Создание подписчика
MessageConsumer consumer = session.createConsumer(topic);
​
// Установка слушателя для получения сообщений
consumer.setMessageListener(new MessageListener() {
    public void onMessage(Message message) {
        if (message instanceof TextMessage) {
            try {
                System.out.println("Received: " + ((TextMessage) message).getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
});
​
// Закрытие соединения
connection.close();
  • Topic представляет собой тему, в которую публикуются сообщения.
  • MessageConsumer подписывается на тему и получает сообщения.
  • MessageListener обрабатывает полученные сообщения.

Основные отличия:

  • Point-to-Point: Сообщение доставляется одному получателю через очередь. Используется для задач, где каждое сообщение должно быть обработано только одним получателем.
  • Publish/Subscribe: Сообщение доставляется всем подписчикам через тему. Используется для задач, где одно сообщение должно быть получено несколькими получателями.

Эти модели позволяют гибко настраивать системы обмена сообщениями в зависимости от требований к доставке и обработке данных.

Тема: Очереди и брокеры сообщений
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки