我是使用Spring Boot和Apache Active MQ刚接触JMS pub / sub的人。 您能否帮助您了解以下情况?
方案1:
步骤1:我有一个发布者,它向主题(Say TopicA)发布消息(Say MessageA),并且在发布期间没有订阅者/使用者,因此该消息将发送给Apache Active MQ中的已入队消息。
Step2:我现在有一个新的TopicA订阅者,如何声明早先的MessageA(已将消息放入Apache Active MQ中?)
我的结论:之前没有人订阅,因此您可能无法获得MessageA。 (如果我错了,请更正)
方案2:
第一步:我有一个发布者,它将消息(说MessageA)发布到主题(说TopicA),而订阅者成功获取了MessageA。
步骤2:现在,由于一些内部/网络问题,订户系统关闭,并且有一个MessageA发布到TopicA。当订户系统启动并运行时,如何回收在订户系统关闭时发布到TopicA的早期MessageA?
这是为了确保即使用户进行了故障转移,它仍然会接收入队消息。
感谢您的编辑! 除非经过同行评审,否则只有您才能看到此修改。
我是使用Spring Boot和Apache Active MQ刚接触JMS pub / sub的人。您能帮忙了解以下情况吗?
方案1:
步骤1:我有一个发布者,它向主题(Say TopicA)发布消息(Say MessageA),并且在发布期间没有订阅者/使用者,因此该消息将发送给Apache Active MQ中的已入队消息。
Step2:我现在有一个新的TopicA订阅者,如何声明早先的MessageA(已将消息放入Apache Active MQ中?)
我的结论:之前没有人订阅,因此您可能无法获得MessageA。 (如果我错了,请更正)
方案2:
第一步:我有一个发布者,它将消息(说MessageA)发布到主题(说TopicA),而订阅者成功获取了MessageA。
步骤2:现在,由于一些内部/网络问题,订户系统关闭,并且有一个MessageA发布到TopicA。当订户系统启动并运行时,如何回收在订户系统关闭时发布到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;
}
答案 0 :(得分:0)
您需要创建一个持久订阅:
MessageConsumer consumer = session.createDurableSubscriber(destination, "Listener" + i);
消息生产者必须是持久的:
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);