4

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

我知道为了通过订阅者接收消息,它应该在发布者之前启动。但是可能存在订阅者由于某种原因宕机需要重新启动的情况。有什么办法,如果我在发布者之后启动订阅者,那么它也应该能够接收消息?

4

3 回答 3

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>
于 2012-10-22T10:21:14.357 回答
1

如果您只对断开重新连接的场景感兴趣,我认为您正在寻找持久订阅者。

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

于 2012-10-22T06:27:48.910 回答
1

通常,如果您想考虑订阅者离线并返回而不会丢失任何消息,您将使用 JMS 持久订阅。这允许您的订阅者在离线时接收它错过的任何消息。请注意,这里需要先订阅一次,然后才能开始收集离线消息。

除了标准的 JMS Durable 消费者模型之外,ActiveMQ 还提供了追溯消费者。另一种可能性是虚拟目的地

于 2012-10-22T10:13:20.363 回答