RabbitMQ spring JAVA客户端停止使用消息,重新启动后恢复运行

时间:2018-09-26 04:37:06

标签: spring-boot rabbitmq spring-rabbitmq

我正在使用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)

随着队列中消息数量的增加,生产者工作正常。

1 个答案:

答案 0 :(得分:0)

当前的1.7.x版本是1.7.10。

确保基础RabbitMQ enableAutoRecovery中的falseConnectionFactory。在4.0.x客户端中默认设置为true; Spring AMQP不需要客户端自动恢复,因为它从1.0.0开始具有自己的恢复机制。

已解决了一些错误,以解决大多数兼容性问题,但应将其设置为false。除非您提供预先配置的RabbitMQ ConnectionFactory-例如PCF上的spring-cloud-connectors,否则Spring AMQP将自动禁用它。

此问题已在连接器的2.0.3版本中修复。