0
우리는 봄 4.3.1 사용하고, 다음과 같은 콩 사용하여 큐에서 메시지를 받고 다시 시작할 수 없습니다 :DefaultMessageListenerContainer
@Bean(name="listenerContainer")
public SprMessageListenerContainer listenerContainer() throws JMSException, SQLException {
SprMessageListenerContainer listenerContainer = new SprMessageListenerContainer();
listenerContainer.setConnectionFactory((ConnectionFactory) connectionFactory());
listenerContainer.setMessageListener(messageListener());
listenerContainer.setSessionTransacted(true);
listenerContainer.setCacheLevel(0);
listenerContainer.setMaxConcurrentConsumers(3);
listenerContainer.setDestinationName("ourQueue");
// (April 2017): we provide the possibility to manually stop/start the listner container > autostart needs to be set to false, otherwise we can only stop the container, but not restart it anymore
// see: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jms/listener/AbstractJmsListeningContainer.html#setAutoStartup-boolean-
listenerContainer.setTransactionManager(jmsTransactionManager());
listenerContainer.setAutoStartup(false);
listenerContainer.start();
Assert.isTrue(listenerContainer.isRunning());
return listenerContainer;
}
@Bean(name="connectionFactory")
public ConnectionFactory connectionFactory() throws JMSException, SQLException {
return AQjmsFactory.getConnectionFactory(dataSourceConfig.gpDataSourceAdapter());
}
private JmsTransactionManager jmsTransactionManager() throws JMSException, SQLException {
JmsTransactionManager transactionManager = new JmsTransactionManager();
transactionManager.setConnectionFactory(connectionFactory());
return transactionManager;
}
SprMessageListenerContainer은 다음과 같습니다
public class SprMessageListenerContainer extends DefaultMessageListenerContainer {
@Override
protected MessageConsumer createConsumer(Session session, Destination destination) throws JMSException {
return ((AQjmsSession) session).createConsumer(destination, null, new SprORADataFactory(), null, false);
}
@Override
protected void doShutdown() throws JMSException {
logger.info("Shutting done.");
}
}
을우리 응용 프로그램에서는 listenerContainer bean에 대한 참조를 올바르게 가져옵니다. 응용 프로그램이 시작되면 리스너가 올바르게 시작되고 처리되는 메시지가 표시됩니다.
listenerContainer.shutdown();
그리고, 어떤 메시지가 더 이상> 처리되지 예상됩니다 우리가 곧 우리의 코드에서
.
그러나이 더 우리의 코드에서, 우리가 할 :listenerContainer.start();
우리는 메시지를 다시 처리 할 기대하지만 그렇지 않다, 아무것도 일어나지 (우리는 또한 예외를 얻을하지 않습니다 및/또는 오류).
Google 빈에서 잘못 구성 되었습니까? 컨테이너를 수동으로 중지/시작하려면 무엇이 누락 되었습니까?
'shutdown()'대신'stop()'을 사용할 수도 있습니다. –