[英]RabbitMQ spring JAVA Client Stopped consuming messages Resumed on Restart
I am using spring-rabbit-1.7.1 library for rabbitmq consumer in java. 我正在为java中的Rabbitmq消费者使用spring-rabbit-1.7.1库。 I have 7 consumers running and same servers are producers as well. 我有7个使用者在运行,相同的服务器也是生产者。 Suddenly consumers stopped consuming messages and resumed when i restarted them. 突然,消费者停止使用消息,并在我重新启动消息时恢复了消息。 There were no exceptions and thread dump is as follow: 没有例外,线程转储如下:
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)
Producers are working fine as number of messages in queue is creeping up. 随着队列中消息数量的增加,生产者工作得很好。
The current 1.7.x version is 1.7.10. 当前的1.7.x版本是1.7.10。
Make sure that enableAutoRecovery
is false
in the underlying RabbitMQ ConnectionFactory
. 确保基础RabbitMQ ConnectionFactory
中的enableAutoRecovery
为false
。 It is set to true
by default in the 4.0.x client; 在4.0.x客户端中,默认情况下将其设置为true
; Spring AMQP doesn't need the client auto-recovery because it has had its own recovery mechanism since 1.0.0. Spring AMQP不需要客户端自动恢复,因为它从1.0.0版本开始就有自己的恢复机制。
There have been several bug fixes to solve most compatibility problems, but it should be set to false
. 已解决了许多错误,以解决大多数兼容性问题,但应将其设置为false
。 Spring AMQP will disable it automatically, unless you provide a pre-configured RabbitMQ ConnectionFactory
- such as with spring-cloud-connectors on PCF. 除非您提供预先配置的RabbitMQ ConnectionFactory
例如PCF上的spring-cloud-connectors,否则Spring AMQP将自动禁用它。
This has been fixed in the 2.0.3 version of the connectors. 该问题已在连接器的2.0.3版本中修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.