java - JMS 发布/订阅问题
问题描述
我是使用 Spring boot 和 Apache Active MQ 的 JMS pub/sub 新手。您能否帮助理解以下场景?
场景一:
第 1 步:我有一个发布者将消息(例如 MessageA)发布到主题(Say TopicA),并且在发布期间没有订阅者/消费者,因此消息会发送到 Apache Active MQ 中排队的消息。
Step2:我现在有一个TopicA的新订阅者,如何声明已经在Apache Active MQ中排队的早期MessageA?
我的结论:之前没有人订阅,因此您可能不会收到 MessageA。(如果我错了请指正)
场景二:
第 1 步:我有一个发布者将消息(Say MessageA)发布到主题(Say TopicA),并且订阅者成功获得了 MessageA。
Step2:现在订阅者系统由于一些内部/网络问题而关闭,并且有一个 MessageA 发布到 TopicA。当订阅者系统启动并运行时,如何回收订阅者系统关闭时发布到 TopicA 的早期 MessageA?
这是为了确保即使订阅者发生故障转移,它仍然会收到 Enqueued 消息。
感谢您的编辑!在经过同行评审之前,只有您可以看到此编辑。
我是使用 Spring boot 和 Apache Active MQ 的 JMS pub/sub 新手。您能否帮助理解以下场景?
场景一:
第 1 步:我有一个发布者将消息(例如 MessageA)发布到主题(Say TopicA),并且在发布期间没有订阅者/消费者,因此消息会发送到 Apache Active MQ 中排队的消息。
Step2:我现在有一个TopicA的新订阅者,如何声明已经在Apache Active MQ中排队的早期MessageA?
我的结论:之前没有人订阅,因此您可能不会收到 MessageA。(如果我错了请指正)
场景二:
第 1 步:我有一个发布者将消息(Say MessageA)发布到主题(Say TopicA),并且订阅者成功获得了 MessageA。
Step2:现在订阅者系统由于一些内部/网络问题而关闭,并且有一个 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;
}
</p>
解决方案
您需要创建一个持久订阅:
MessageConsumer consumer = session.createDurableSubscriber(destination, "Listener" + i);
消息生产者必须是持久的:
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
推荐阅读
- python - 使用模型中的数据填充 Django 表单字段
- android - catch 块不返回空值
- excel - 根据月份中的某天执行 VLOOKUP 查询
- java - 如何将扩展 FlutterPlugin 的类添加到 GeneratedPluginRegistrant?
- python - Jupyter 中函数输入的 Python 提示
- asp.net-mvc - 如何在 MVC Core 中的对象上显示和分配外键?
- python - 如何在python中将值输入到html表单中
- javascript - 登录后以 express 部分显示用户名
- phpmyadmin - 无法在 PHPmyadmin 中创建新用户
- html - 如何使用 css nth child 使我的最后一个导航链接具有不同的颜色