Stellen Sie sicher, dass DefaultMessageListenerContainer ein receiveTimeout = -1 hat

Kann jemand mich auf eine Möglichkeit hinweisen, einen DefaultMessageListenerContainer im Frühjahr zu stoppen, der mit einem definiert ist?receiveTimeout = -1 (d. h. es wird die blockierende Version von javax.jms.MessageConsumer # receive verwendet)?

Eigentlich habe ich sowohl stop () als auch shutdown () von DMLC ausprobiert, aber der Consumer-Thread bleibt beim Aufruf von receive () hängen.

"heartBeatContainer-1" prio=6 tid=0x0304d800 nid=0x1d20 in Object.wait() [0x037ef000]
java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x22c48ab0> (a java.lang.Object)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.activemq.SimplePriorityMessageDispatchChannel.dequeue(SimplePriorityMessageDispatchChannel.java:87)
    - locked <0x22c48ab0> (a java.lang.Object)
    at org.apache.activemq.ActiveMQMessageConsumer.dequeue(ActiveMQMessageConsumer.java:452)
    at org.apache.activemq.ActiveMQMessageConsumer.receive(ActiveMQMessageConsumer.java:504)
    at org.springframework.jms.connection.CachedMessageConsumer.receive(CachedMessageConsumer.java:70)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:430)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:310)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1069)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1061)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:958)
    at java.lang.Thread.run(Thread.java:662)

Ich kann die Verbindung nicht trennen, da andere Listener weiterhin Nachrichten empfangen sollen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage