ACTIVEMQ - 订阅者如何在发布者之后启动时收到主题消息?

时间:2012-10-22 06:12:54

标签: spring jms activemq jmstemplate

在我的程序中,我有两个模块: - 发布者和订阅者,通过主题进行通信。

据我所知,为了接收订阅者的邮件,应该在发布者之前启动。但是可能存在订户由于某种原因而关闭并且需要重新启动的情况。有没有办法,如果我在发布者之后启动订阅者,那么它是否应该能够接收消息?

3 个答案:

答案 0 :(得分:2)

使用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>

答案 1 :(得分:1)

如果您只对断开连接重新连接方案感兴趣,我认为您正在寻找耐用用户。

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

答案 2 :(得分:1)

通常,如果您想要考虑订阅者离线并返回而不丢失任何消息,您将使用JMS持久订阅。这样,您的订阅者就可以在离线时收到错过的任何消息。请注意,这里需要注意的是,在开始收集离线消息之前,需要先订阅一次。

除了标准的JMS Durable消费者模型,ActiveMQ还提供retroactive consumer。另一种可能性是Virtual destinations