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

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

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

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

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


person Michaela    schedule 25.08.2013    source источник


Ответы (1)


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

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

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

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

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

[...]

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

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

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

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

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

person Beryllium    schedule 25.08.2013
comment
Если бы у подписчиков были разные идентификаторы clientId, разве я не мог бы иметь более одного? - person Michaela; 27.08.2013
comment
@Michaela Извините, я неправильно истолковал цитируемый текст. Так что да, похоже, это работает: один и тот же идентификатор клиента, но разные имена подписок, чтобы иметь уникальные идентификаторы. - person Beryllium; 28.08.2013