2016-09-20 4 views
1

У меня есть приложение Spring JMS, сконфигурированное с помощью аннотаций, и я пытаюсь предоставить некоторую информацию для приложения перед началом прослушивания 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) { 
... 
} 

ответ

1

Вы должны autowire 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(); 
+2

Или вы можете 'начать()' реестра и начнет все зарегистрированные контейнеры. –

 Смежные вопросы

  • Нет связанных вопросов^_^