我不熟悉使用Spring boot和Apache Active MQ的JMS pub/sub。您能帮我理解一下下面的场景吗?
场景1:
Step1:我有一个发布者,它将消息(比如MessageA)发布到一个主题(比如TopicA),并且在发布期间没有订阅者/消费者,因此消息将发送到Active中排队的消息。
Step2:我现在有一个新的TopicA订阅者,如何认领已经在Apache Active MQ中排队的消息的早期MessageA?
我的结论是:之前没有人订阅,因此你可能得不到MessageA。(如果我错了,请纠正)
场景2:
Step1:我有一个发布者,它将消息(比如MessageA)发布到一个主题(比如TopicA),而订阅者成功地获取了MessageA。
Step2:现在,由于一些内部/网络问题,订阅者系统停机了,并且有一个发布到TopicA的MessageA。当订阅者系统启动并运行时,如何回收在订阅者系统关闭时发布到TopicA的早期MessageA?
这是为了确保即使在订阅服务器上存在故障转移,它仍然会接收入队的消息。
感谢您的编辑!此编辑将只对您可见,直到它被同行审阅。
我不熟悉使用Spring boot和Apache Active MQ的JMS pub/sub。您能帮我理解一下下面的场景吗?
场景1:
Step1:我有一个发布者,它将消息(比如MessageA)发布到一个主题(比如TopicA),并且在发布期间没有订阅者/消费者,因此消息将发送到Active中排队的消息。
Step2:我现在有一个新的TopicA订阅者,如何认领已经在Apache Active MQ中排队的消息的早期MessageA?
我的结论是:之前没有人订阅,因此你可能得不到MessageA。(如果我错了,请纠正)
场景2:
Step1:我有一个发布者,它将消息(比如MessageA)发布到一个主题(比如TopicA),而订阅者成功地获取了MessageA。
Step2:现在,由于一些内部/网络问题,订阅者系统停机了,并且有一个发布到TopicA的MessageA。当订阅者系统启动并运行时,如何回收在订阅者系统关闭时发布到TopicA的早期MessageA?
这是为了确保即使在订阅服务器上存在故障转移,它仍然会接收入队的消息。
我的生产者代码:
@Bean
public JmsTemplate jmsTemplate(){
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory());
template.setPubSubDomain(true);
template.setDeliveryMode(DeliveryMode.PERSISTENT);
return template;
}
我的消费者代码:
@Bean
public JmsListenerContainerFactory<?> jsaFactory(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setPubSubDomain(true);
factory.setSubscriptionDurable(true);
configurer.configure(factory, connectionFactory);
return factory;
}
发布于 2018-12-18 14:58:10
您需要创建一个持久订阅:
MessageConsumer consumer = session.createDurableSubscriber(destination, "Listener" + i);
messageproducer必须持久化:
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
https://stackoverflow.com/questions/53827734
复制相似问题