【问题标题】:JMS container factory manual startupJMS容器工厂手动启动
【发布时间】:2016-09-20 13:04:32
【问题描述】:

我有一个通过注释配置的 Spring JMS 应用程序,我试图在 JMS 侦听器启动之前向应用程序提供一些信息。之后,我想手动启动监听器。

使用以下配置:

@Bean(name = "queueContainerFactory")
public JmsListenerContainerFactory<?> queue(ConnectionFactory cf) {
        SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
        ActiveMQConnectionFactory amqCf = (ActiveMQConnectionFactory) cf;
        factory.setConnectionFactory(amqCf);
    ...
}

我看到了选项:factory.setAutoStartup(FALSE);

这样,应用程序上下文启动,@JmsListener 没有启动,但我不知道如何手动启动 JMS 容器工厂。

@JmsListener(containerFactory="queueContainerFactory", destination = "${destination}")
    public void jmsListener(String message) {
...
}

【问题讨论】:

    标签: spring spring-integration spring-jms


    【解决方案1】:

    您必须自动连接JmsListenerEndpointRegistry 并通过其id 获取特定的MessageListenerContainer。其中id可以在@JmsListener上配置:

    /**
     * The unique identifier of the container managing this endpoint.
     * <p>If none is specified, an auto-generated one is provided.
     * @see org.springframework.jms.config.JmsListenerEndpointRegistry#getListenerContainer(String)
     */
    String id() default "";
    

    可能看起来像:

    @JmsListener(id ="myContainer", 
               containerFactory="queueContainerFactory", 
               destination = "${destination}")
        public void jmsListener(String message) {
    ...
    }
    
    ...
    
    @Autowired
    JmsListenerEndpointRegistry jmsListenerEndpointRegistry;
    
    ...
    
    this.jmsListenerEndpointRegistry.getListenerContainer("myContainer").start();
    

    【讨论】:

    • 或者你可以start()注册中心,它会启动所有注册的容器。
    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 2015-06-22
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多