dev*_*per 2 java spring jms spring-jms
我正在使用Spring的@JmsListener(spring-jms-4.3.4.RELEASE.jar)使用以下代码从ActiveMQ接收消息:
@Component
public class TopicSubscriber {
@JmsListener(destination="xyz.topic1", subscription="xyz_topic_durable_subscription")
public void send(Product product) {
System.out.println(" reveived message ***"+product);
}
}
Run Code Online (Sandbox Code Playgroud)
根据Spring API的文档(下面给出的链接),以上代码应创建一个持久订阅,订阅名称为xyz_topic_durable_subscription:
但是,问题是上述代码仅创建了非持久订阅,我可以通过使用管理控制台监视ActiveMQ来找到(以下添加了屏幕截图,请在“活动非持久主题订阅者”部分下查找“ xyz.topic1”目标) 。
要进行持久订阅,代码中是否需要进行任何更改?
您需要适当地配置ListenerContainerFactory:
@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setPubSubDomain(true);
factory.setSubscriptionDurable(true);
factory.setClientId("jmsDemo");
// This provides all boot's default to this factory, including the message converter
configurer.configure(factory, connectionFactory);
// You could still override some of Boot's default if necessary.
return factory;
}
Run Code Online (Sandbox Code Playgroud)
这里有有趣的部分:
factory.setSubscriptionDurable(true);
factory.setClientId("jmsDemo");
Run Code Online (Sandbox Code Playgroud)
现在,当您输入ActiveMQ WebConsole时,您应该看到以下内容:
在上面标记为正确的答案中,代码:
factory.setPubSubDomain(true);
factory.setSubscriptionDurable(true);
factory.setClientId("jmsDemo");
Run Code Online (Sandbox Code Playgroud)
必须在之后
configurer.configure(factory, connectionFactory);
Run Code Online (Sandbox Code Playgroud)
否则您将丢失这些设置。
| 归档时间: |
|
| 查看次数: |
2034 次 |
| 最近记录: |