JMS容器工厂手动启动

时间:2016-09-20 13:04:32

标签: spring spring-integration spring-jms

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

使用以下配置:

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
  <div class="row">
    <div class="col-xs-6">
      <h1>1st column</h1>
      </div>
    <div class="col-xs-6">
      <h1>2nd column</h1>
      </div>
    </div>
  </div>

我看到了选项:@Bean(name = "queueContainerFactory") public JmsListenerContainerFactory<?> queue(ConnectionFactory cf) { SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); ActiveMQConnectionFactory amqCf = (ActiveMQConnectionFactory) cf; factory.setConnectionFactory(amqCf); ... }

这样启动应用程序上下文并且factory.setAutoStartup(FALSE);没有启动但我不知道如何手动启动JMS容器工厂。

@JmsListener

1 个答案:

答案 0 :(得分:1)

您必须自动装配JmsListenerEndpointRegistry并通过其MessageListenerContainer获取特定id。您可以在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();