首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JMS发布/订阅问题

JMS发布/订阅问题
EN

Stack Overflow用户
提问于 2018-12-18 14:51:15
回答 1查看 46关注 0票数 0

我不熟悉使用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?

这是为了确保即使在订阅服务器上存在故障转移,它仍然会接收入队的消息。

我的生产者代码:

代码语言:javascript
运行
复制
@Bean
public JmsTemplate jmsTemplate(){
    JmsTemplate template = new JmsTemplate();
    template.setConnectionFactory(connectionFactory());
    template.setPubSubDomain(true);
    template.setDeliveryMode(DeliveryMode.PERSISTENT);
    return template;
}

我的消费者代码:

代码语言:javascript
运行
复制
@Bean
public JmsListenerContainerFactory<?> jsaFactory(ConnectionFactory connectionFactory,
                                                DefaultJmsListenerContainerFactoryConfigurer configurer) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setPubSubDomain(true);
    factory.setSubscriptionDurable(true);
    configurer.configure(factory, connectionFactory);
    return factory;
}
EN

回答 1

Stack Overflow用户

发布于 2018-12-18 14:58:10

您需要创建一个持久订阅:

代码语言:javascript
运行
复制
MessageConsumer consumer = session.createDurableSubscriber(destination, "Listener" + i);

messageproducer必须持久化:

代码语言:javascript
运行
复制
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53827734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档