ACTIVEMQ — Как подписчик может получать сообщения темы, если он запущен после издателя?

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

Я понимаю, что для получения сообщений подписчиком, он должен быть запущен до публикации. Но может быть сценарий, когда абонент по какой-то причине выходит из строя и его необходимо перезапустить. Есть ли способ, которым, если я запущу подписчика после издателя, он также сможет получать сообщения?


person Vishal    schedule 22.10.2012    source источник


Ответы (3)


Если вас интересует только сценарий отключения и повторного подключения, я думаю, что надежный подписчик — это то, что вам нужно.

http://activemq.apache.org/how-do-durable-queues-and-topics-work.html

person Aksel Willgert    schedule 22.10.2012

Добавление примера кода с использованием Spring DMLC и надежных подписчиков. Труднее добиться этого с помощью простого JMSTemplate (вы пометили это, так что я предполагаю, что вы используете шаблоны JMS для получения?), поскольку вам нужно захватить сеанс из шаблона и создать долговременного потребителя самостоятельно. Это автоматически обрабатывается для вас, если вы используете подход DMLC.

<bean id="myDurableConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
 <property name="connectionFactory" ref="myCf" />
 <property name="sessionTransacted" value="true" />
 <property name="subscriptionDurable" value="true"/>
 <property name="durableSubscriberName" value="myDurableNameThatIsUniqueForThisInstance" />
 <property name="destinationName" value="someTopic" />
 <property name="messageListener" ref="myListener" />
< /bean>
person Petter Nordlander    schedule 22.10.2012
comment
Спасибо. Я думаю, что сейчас durableSubscriptionName, а не durableSuscriberName - person Kirby; 07.05.2015

В общем, если вы хотите учитывать, что подписчик уходит в автономный режим и возвращается, не пропуская ни одного сообщения, вы должны использовать долговременные подписки JMS. Это позволяет вашему подписчику получать любые сообщения, которые он пропустил в автономном режиме. Обратите внимание, что предостережение здесь заключается в том, что сначала необходимо подписаться один раз, прежде чем он начнет собирать автономные сообщения.

Помимо стандартной потребительской модели JMS Durable, ActiveMQ также предоставляет ретроактивного потребителя. Другой вариант — Виртуальные места назначения.

person Tim Bish    schedule 22.10.2012