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
获得特定的 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();
我有一个通过注释配置的 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
获得特定的 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();