Java @具有持久订阅的JmsListener问题
我使用Spring的Java @具有持久订阅的JmsListener问题,java,spring,jms,spring-jms,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) {
@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);
}
}
根据Spring API的文档(下面给出的链接),上面的代码应该创建一个持久订阅,订阅名称为xyz_topic_持久订阅
:
但是,问题是上面的代码只创建了非持久订阅,我可以通过使用管理控制台监视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;
}
现在,当您进入ActiveMQ WebConsole时,您应该看到:
在上面标记为正确的答案中,代码:
factory.setPubSubDomain(true);
factory.setSubscriptionDurable(true);
factory.setClientId("jmsDemo");
一定要来
configurer.configure(factory, connectionFactory);
否则您将丢失这些设置。此“配置器”属于哪一类?你能分享更多细节吗?感谢configurer.configure(工厂、连接工厂);我从'configurer'获得的示例代码是作为参数传递到方法中的DefaultJmsListenerContainerFactoryConfigurer。我发现我还必须命名bean
jmsListenerContainerFactory
,以覆盖默认值。
configurer.configure(factory, connectionFactory);