我正在使用spring-rabbit-1.7.1库供Java中的Rabbitmq使用者使用。我有7个使用者在运行,相同的服务器也是生产者。 突然,消费者停止使用消息,并在我重新启动消息时恢复了消息。 没有例外,线程转储如下:
SimpleAsyncTaskExecutor-1" #77 prio=5 os_prio=0 tid=0x00007f497ef34800 nid=0x4e93 waiting on condition [0x00007f490cee6000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000064c00bfa0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.nextMessage(BlockingQueueConsumer.java:439)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:1212)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:1187)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1600(SimpleMessageListenerContainer.java:96)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContai
"AMQP Connection 10.66.107.115:5672" #78 prio=5 os_prio=0 tid=0x00007f49901a5000 nid=0x4e94 runnable [0x00007f490cde5000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
- locked <0x000000064c3534d0> (a java.io.BufferedInputStream)
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288)
随着队列中消息数量的增加,生产者工作正常。
答案 0 :(得分:0)
当前的1.7.x版本是1.7.10。
确保基础RabbitMQ enableAutoRecovery
中的false
是ConnectionFactory
。在4.0.x客户端中默认设置为true
; Spring AMQP不需要客户端自动恢复,因为它从1.0.0开始具有自己的恢复机制。
已解决了一些错误,以解决大多数兼容性问题,但应将其设置为false
。除非您提供预先配置的RabbitMQ ConnectionFactory
-例如PCF上的spring-cloud-connectors,否则Spring AMQP将自动禁用它。
此问题已在连接器的2.0.3版本中修复。