SimpleMessageListenerContainer 停止后未恢复

SimpleMessageListenerContainer is not recover after stoping it

当某个事件到来时,我使用 container.stop(); 停止我的 rabbitmq listner,在完成所需的工作后,我用 container.start() 重新启动它,但是当一个新事件到来时,我收到以下错误:

Exception in thread "SimpleAsyncTaskExecutor-1" 2016-04-22T16:20:53.646  WARN 15336 --- [cTaskExecutor-1] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it
java.lang.NullPointerException: null
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.isActive(SimpleMessageListenerContainer.java:756) ~[spring-rabbit-1.4.3.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access0(SimpleMessageListenerContainer.java:82) ~[spring-rabbit-1.4.3.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1100) ~[spring-rabbit-1.4.3.RELEASE.jar:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_77]

它实际上是一个无害(但可怕)的日志消息,但它是 fixed in 1.5.3

所述:

It's generally better to stop the container on a separate thread.

因为在侦听器退出之前容器无法完全停止。