Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @具有持久订阅的JmsListener问题_Java_Spring_Jms_Spring Jms - Fatal编程技术网

Java @具有持久订阅的JmsListener问题

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) {

我使用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);
    }
}
根据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);