Search code examples
javarabbitmqspring-rabbit

SimpleMessageListenerContainer is not recover after stoping it


When a certain event arrives, I stop my rabbitmq listner using container.stop(); and after the needed job is done, I restart it with container.start(), but when a new event arrives, I get following error:

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.access$600(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]

Solution

  • It's actually a harmless (but scary) log messsage, but it is fixed in 1.5.3.

    As mentioned in this answer:

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

    because the container can't fully stop until the listener exits.