Публикация подписного дизайна в JBoss ESB с гарантированной доставкой

У меня возникают проблемы при разработке службы публикации / подписки, которая будет работать на JBoss ESB. Мне нужно иметь возможность опубликовать сообщение в теме, которую, вероятно, будут слушать 200 подписчиков, и они будут что-то делать с сообщением, как только получат его. Я пишу сервис публикации и пример сервиса подписчика, чтобы продемонстрировать, как это можно сделать.

Мне нужно иметь гарантированную доставку этим подписчикам. Если они на какое-то время отключаются от сети, и сообщения публикуются в течение этого времени, когда они возвращаются в оперативный режим, эти сообщения должны быть доставлены. Поэтому я думаю, что это означает, что они должны быть постоянными подписчиками (я понимаю, что тема не долговечна, но подписчики определены как долговременные).

У меня сейчас есть служба публикации, которая помещает сообщение ESB в ESB Aware Queue, которая вызывает NotifyTopic, которая помещает сообщение в раздел ESB-Unaware. У меня есть подписчик, у которого есть слушатель для темы ESB-Unaware, и он вызывает веб-сервис, используя httprouter, который отправляет сообщение для обработки моим веб-сервисом. Это все работает - кроме случаев, когда мой веб-сервис находится в автономном режиме (я должен выяснить, как справиться с этим сценарием, но я еще не там), или если моя служба подписки ESB отключена (что я проверяю, удаляя ее, отправляя несколько публикуют сообщения и переустанавливают их - никакие резервные копии сообщений не отправляются на мой веб-сервис).

Я уверен, что не правильно собираю подписчика. Я думал, что мне нужно, чтобы подписчик был развернут в ESB. Я не уверен, как это будет работать в противном случае, как он будет развернут на другом сервере, а затем все еще будет подключен к ESB (стараясь не связываться с взаимными ssl, межсетевыми экранами, портами и т. Д.). Я полагал, что подписчик, установленный на ESB, будет лучшим вариантом. Но я не знаю, как заставить его быть прочным / иметь гарантированную доставку.

1 ответ

Решение

Цитата из создания надежных приложений JMS

5.2.1 Создание долговременных подписок

Чтобы убедиться, что приложение pub / sub получает все опубликованные сообщения, используйте режим доставки PERSISTENT для издателей. Кроме того, используйте длительные подписки для подписчиков.

Метод TopicSession.createSubscriber создает недлительного подписчика. Недопустимый подписчик может получать только те сообщения, которые опубликованы, пока он активен.

За счет более высоких накладных расходов вы можете использовать метод TopicSession.createDurableSubscriber для создания надежного подписчика. Надежная подписка может иметь только одного активного подписчика одновременно.

[...]

Вы устанавливаете уникальную личность постоянного абонента, устанавливая следующее:

  • Идентификатор клиента для соединения
  • Тема и название подписки для подписчика

Я провел несколько тестов с использованием JBoss 7

  • Я установил идентификатор клиента на уровне фабрики соединений
  • Используя разные имена подписок для каждого из трех подписчиков:
topicSession.createDurableSubscriber(topic, subscriptionName);

и JMS-сервер должным образом буферизует сообщения для каждого отключенного абонента.

Другие вопросы по тегам