Потребление сообщений JMS

Я не уверен, что происходит в приведенных ниже сценариях, было бы очень полезно, если бы кто-нибудь объяснил это.

Производитель (P) посылает сообщения M1, M2, M3, M4, M5, M6, M7; предполагая, что он отправлен с момента времени T1 до T7.

Предположим, что ActiveMQ используется в качестве поставщика JMS (AMQ).

Потребитель сообщений (L) будет прослушивателем, привязанным к теме. Название темы: jmsTopic

Сценарий 1:

AMQ работает, L не подключен к jmsTopic в AMQ. P отправляет M1 на M7 в jmsTopic. Если L подключен к jmsTopic во время, скажем, T8, которое больше, чем T7, будет ли он получать сообщения от M1 до M7 или только сообщения, отправленные в тему после времени T8.

Сценарий 2: AMQ работает, L подключен и слушает jmsTopic, P отправляет M1 на M4. L получает от M1 до M4. Тем временем L обрабатывает от M1 до M4, P отправляет M5 к M7, однако L выходит из строя во время обработки M4. Если L снова подключается к jmsTopic , получает ли он M5-M7 или только сообщения, которые были отправлены после того, как L подключился к jmsTopic, будут получены L.

Сценарий 3: AMQ работает, L подключен и слушает jmsTopic, P отправляет M1 на M7. Однако AMQ дает сбой; знает о статусе AMQ и повторно подключается, как только AMQ запущен и работает.


person firefox784    schedule 17.05.2011    source источник


Ответы (1)


Сценарий 1: AMQ работает, L не подключен к jmsTopic в AMQ. P отправляет M1 на M7 в jmsTopic. Если L подключен к jmsTopic во время, скажем, T8, которое больше, чем T7, будет ли он получать сообщения от M1 до M7 или только сообщения, отправленные в тему после времени T8.

Весь смысл очереди в том, чтобы гарантировать доставку. Никакие сообщения не обрабатываются до тех пор, пока прослушиватель не удалит их из очереди, поэтому все сообщения, пришедшие до T8, будут там.

Сценарий 2: AMQ работает, L подключен и слушает jmsTopic, P отправляет M1 на M4. L получает от M1 до M4. Тем временем L обрабатывает от M1 до M4, P отправляет M5 к M7, однако L выходит из строя во время обработки M4. Если L снова подключается к jmsTopic , получает ли он M5-M7 или только сообщения, которые были отправлены после того, как L подключился к jmsTopic, будут получены L.

То же, что и №1: все сообщения M5 и новее будут получены слушателем.

Сценарий 3: AMQ работает, L подключен и слушает jmsTopic, P отправляет M1 на M7. Однако AMQ дает сбой; знает о статусе AMQ и повторно подключается, как только AMQ запущен и работает.

Настройте AMQ для гарантированной доставки; все сообщения будут сериализованы, чтобы гарантировать доставку при получении.

person duffymo    schedule 17.05.2011
comment
Спасибо за ответ. сообщения не будут обрабатываться до тех пор, пока слушатель не удалит их из очереди Применимо ли это также к домену публикации/подписки, то есть будет ли это работать так же для темы; Я думаю, что сообщение не будет удалено в случае pub/subscriber домена, просто копия сообщения будет отправлена ​​каждому из слушателей. - person firefox784; 17.05.2011
comment
Темы должны быть разные. Подписчик может получать только темы, опубликованные после подписки. - person duffymo; 17.05.2011
comment
просто поместив это здесь, для справки. Издатели и подписчики имеют временную зависимость. Клиент, который подписывается на тему, может потреблять только сообщения, опубликованные после того, как клиент создал подписку, и подписчик должен оставаться активным, чтобы он мог потреблять сообщения.... полученные из [ссылки]download.oracle.com/javaee/5/tutorial/doc/bncdx.html#bnceb - person firefox784; 01.10.2011