Publish-subscribe (Pub-sub) модель применима, когда одному или нескольким компонентам (publishers) необходимо послать сообщение одному или нескольким компонентам-адресатам (subscribers). Данная модель основана на понятии message topic.
Cледует помнить, что многие pub-sub системы не гарантируют доставку сообщений в том порядке, в каком они были посланы (в отличие от point-to-point, где queue реализует принцип first-in/first-out).
Задача сохранения порядка следования сообщений не тривиальна даже в случае одного topic.
При необходимости сохранение порядка доставки сообщений в случае множественных topics –сложность возрастает экспоненциально. Поэтому в случае pub-sub модели следует по возможности избегать ситуаций, когда порядок следования сообщений важен (либо использовать заголовки и раздел свойств сообщений для синхронизации).
Алгоритм реализации:
1. Сначала найдем сервис JNDI, инициализируем
2. Найдем ConnectionFactory 3. Создадим TopicConnection соединение 4. Создадим TopicSession 5. Найдем topic в дереве JNDI (или создадим новый, если он не существует) 6. Создадим простейшее текстовое сообщение textMessage 7. Создадим MessageProducer, (в данном случае TopicPublisher) 8. Посылаем сообщение В Pub-Sub subscriber существует два способа получения сообщения: синхронный, с использованием метода receive() интерфейса TopicSubscriber, либо асинхронный, с использованием интерфейса MessageListener.
В синхронном варианте, получив (либо создав) Topic, создадим consumer (объект принимающий сообщения): TopicSubscriber subscriber = session.createSubscriber(topic);
После активизации connection, вы можете получать сообщения: TextMessage textMessage = (TextMessage)subscriber.receive();
В случае асинхронного получения сообщений реализуйте метод onMessage интерфейса MessageListener, и зарегистрируйте новый Listener с помощью метода setMessageListener интерфейса TopicSubscriber.