在我的程序中,我有两个模块:- 通过主题进行通信的发布者和订阅者。
我知道为了通过订阅者接收消息,它应该在发布者之前启动。但是可能存在订阅者由于某种原因宕机需要重新启动的情况。有什么办法,如果我在发布者之后启动订阅者,那么它也应该能够接收消息?
在我的程序中,我有两个模块:- 通过主题进行通信的发布者和订阅者。
我知道为了通过订阅者接收消息,它应该在发布者之前启动。但是可能存在订阅者由于某种原因宕机需要重新启动的情况。有什么办法,如果我在发布者之后启动订阅者,那么它也应该能够接收消息?
使用 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>
如果您只对断开重新连接的场景感兴趣,我认为您正在寻找持久订阅者。
http://activemq.apache.org/how-do-durable-queues-and-topics-work.html