Spring云流兔子源与RabbitMQ失去连接

Spring云流兔子源与RabbitMQ失去连接,rabbitmq,spring-amqp,spring-rabbit,spring-cloud-stream,Rabbitmq,Spring Amqp,Spring Rabbit,Spring Cloud Stream,我有一个关于SpringCloudStream和RabbitMQ的问题。我不知道为什么,但我经常会遇到这个问题,我们会在几秒钟内失去与rabbit的连接,然后重新建立连接 以下是堆栈跟踪: [container-1] WARN org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer - Consumer raised exception, processing can restart if the conne

我有一个关于SpringCloudStream和RabbitMQ的问题。我不知道为什么,但我经常会遇到这个问题,我们会在几秒钟内失去与rabbit的连接,然后重新建立连接

以下是堆栈跟踪:

[container-1] WARN org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer - Consumer raised exception, processing can restart if the connection factory supports it
com.rabbitmq.client.ShutdownSignalException: connection error
at com.rabbitmq.client.impl.AMQConnection.startShutdown(AMQConnection.java:743)
at com.rabbitmq.client.impl.AMQConnection.shutdown(AMQConnection.java:733)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:573)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.EOFException
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:290)
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:139)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:542)
... 1 more
以下是我们正在使用的应用程序属性:

spring.rabbitmq.host=rabbit_host
spring.rabbitmq.port=rabbit_port
spring.rabbitmq.username=rabbit_user
spring.rabbitmq.password=rabbit_password
spring.rabbitmq.ssl.enabled=true
rabbit.queues=someQueue
spring.cloud.stream.bindings.output.content-type=application/json
rabbit.enable-retry=true
spring.cloud.stream.defaultBinder=rabbit
spring.cloud.stream.bindings.input.binder=kafka
spring.cloud.stream.bindings.output.binder=rabbit
spring.rabbitmq.requested-heartbeat=60
我们正在使用AggregateApplicationBuilder来协调我们的流

public static void main(String[] args) {
new AggregateApplicationBuilder(SpringApplication.run(OurApplication.class)).from(RabbitSourceConfiguration.class).from(ourTransformer.class).to(ourSink.class).run(args);
}
通常情况下,如果他们能够自行解决一些间歇性连接问题,我们可以接受,但这是我们面临的主要问题在我们的生产环境中,一段时间后,我们实际上会永久性地失去连接。下面是该问题发生时的堆栈跟踪

Caused by: com.rabbitmq.client.PossibleAuthenticationFailureException: Possibly caused by authentication failure
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:342) ~[amqp-client-3.6.3.jar!/:na]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:813) ~[amqp-client-3.6.3.jar!/:na]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:725) ~[amqp-client-3.6.3.jar!/:na]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:296) ~[spring-rabbit-1.6.1.RELEASE.jar!/:na]
... 12 common frames omitted
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67) ~[amqp-client-3.6.3.jar!/:na]
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:37) ~[amqp-client-3.6.3.jar!/:na]
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:367) ~[amqp-client-3.6.3.jar!/:na]
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:234) ~[amqp-client-3.6.3.jar!/:na]
at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:212) ~[amqp-client-3.6.3.jar!/:na]
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:327) ~[amqp-client-3.6.3.jar!/:na]
... 15 common frames omitted
Caused by: java.io.EOFException: null
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:290) ~[na:1.8.0_66]
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95) ~[amqp-client-3.6.3.jar!/:na]
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:139) ~[amqp-client-3.6.3.jar!/:na]
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:542) ~[amqp-client-3.6.3.jar!/:na]
... 1 common frames omitted
我们认为这可能是因为rabbit服务器或haproxy在空闲一段时间后正在转储我们的连接,但后来我添加了“请求的心跳”,我们仍然遇到了问题

有人有任何想法或线索来解释这个问题的原因吗?任何帮助或指导都将不胜感激

谢谢


Matt

查看服务器日志,查看它是否提供了有关连接关闭原因的更多信息。
=信息报告====2017年4月17日::05:07:22==接受AMQP连接(**ips here**)
=警告报告===2017年4月17日::05:08:07==关闭AMQP连接(**ips here**):客户端意外关闭了TCP连接
报告断开连接时,我们所有的rabbit服务器日志都只包含这两条消息,因此我无法从中收集到任何有意义的信息。@GaryRussell,我们会面临与此相同的问题吗?我不这么认为;您可能需要运行网络跟踪。我不知道你怎么会遇到连接永远无法恢复的情况,除非侦听器线程卡在某个地方。线程转储应有助于确定这一点。@GaryRussell Darn ok。下次发生这种情况时,我们将尝试进行线程转储。为了排除这种可能性,我知道我们的产品rabbit位于v3.6.0上,而我们的amqp客户机jar位于SpringRabbit 1.6.1下的3.6.3上。这会给我们带来什么问题吗?非常感谢Gary的帮助,非常感谢!查看服务器日志,查看它是否提供了有关连接关闭原因的更多信息。
=信息报告===2017年4月17日::05:07:22===接受AMQP连接(**ips here**)
=警告报告===2017年4月17日::05:08:07===关闭AMQP连接(**ips here**):客户端意外关闭了TCP连接
报告断开连接时,我们所有的rabbit服务器日志都只包含这两条消息,因此我无法从中收集到任何有意义的信息。@GaryRussell,我们会面临与此相同的问题吗?我不这么认为;您可能需要运行网络跟踪。我不知道你怎么会遇到连接永远无法恢复的情况,除非侦听器线程卡在某个地方。线程转储应有助于确定这一点。@GaryRussell Darn ok。下次发生这种情况时,我们将尝试进行线程转储。为了排除这种可能性,我知道我们的产品rabbit位于v3.6.0上,而我们的amqp客户机jar位于SpringRabbit 1.6.1下的3.6.3上。这会给我们带来什么问题吗?非常感谢Gary的帮助,非常感谢!