【发布时间】:2018-12-18 06:51:15
【问题描述】:
我是使用 Spring boot 和 Apache Active MQ 的 JMS pub/sub 新手。 您能否帮助理解以下场景?
场景 1:
第 1 步:我有一个发布者将消息(例如 MessageA)发布到主题(Say TopicA),并且在发布期间没有订阅者/消费者,因此消息会发送到 Apache Active MQ 中排队的消息。
Step2:我现在有一个新的 TopicA 订阅者,如何认领早先已经在 Apache Active MQ 中排队的 Messages 的 MessageA?
我的结论:之前没有人订阅,因此您可能不会收到 MessageA。 (如有错误请指正)
场景 2:
第 1 步:我有一个发布者将消息 (Say MessageA) 发布到主题 (Say TopicA) 并且订阅者成功获取了 MessageA。
步骤 2:现在订阅者系统由于一些内部/网络问题而关闭,并且有一个 MessageA 发布到 TopicA。当订阅者系统启动并运行时,如何回收订阅者系统关闭时发布到 TopicA 的早期 MessageA?
这是为了确保即使订阅者发生故障转移,它仍然会收到 Enqueued 消息。
感谢您的编辑! 在经过同行评审之前,只有您可以看到此修改。
我是使用 Spring boot 和 Apache Active MQ 的 JMS pub/sub 新手。您能否帮助理解以下场景?
场景 1:
第 1 步:我有一个发布者将消息(例如 MessageA)发布到主题(Say TopicA),并且在发布期间没有订阅者/消费者,因此消息会发送到 Apache Active MQ 中排队的消息。
Step2:我现在有一个新的 TopicA 订阅者,如何认领早先已经在 Apache Active MQ 中排队的 Messages 的 MessageA?
我的结论:之前没有人订阅,因此您可能不会收到 MessageA。 (如有错误请指正)
场景 2:
第 1 步:我有一个发布者将消息 (Say MessageA) 发布到主题 (Say TopicA) 并且订阅者成功获取了 MessageA。
步骤 2:现在订阅者系统由于一些内部/网络问题而关闭,并且有一个 MessageA 发布到 TopicA。当订阅者系统启动并运行时,如何回收订阅者系统关闭时发布到 TopicA 的早期 MessageA?
这是为了确保即使订阅者发生故障转移,它仍然会收到 Enqueued 消息。
我的生产者代码:
@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;
}
【问题讨论】:
标签: java spring-boot jms publish-subscribe jms-topic