JMS容器工厂手动启动

JMS container factory manual startup

我有一个通过注释配置的 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) {
...
}

您必须自动装配 JmsListenerEndpointRegistry 并通过其 id 获得特定的 MessageListenerContainerid 你可以在 @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();