Java RabbitMQ连接正在断开且不恢复,尽管存在心跳设置

Java RabbitMQ连接正在断开且不恢复,尽管存在心跳设置,java,spring,rabbitmq,spring-amqp,Java,Spring,Rabbitmq,Spring Amqp,我试图找出一个问题,即在我们的生产环境中,用户与RabbitMQ的连接被删除。这个问题似乎是在运行了几天之后发生的,通过重新启动我们的应用程序,它似乎可以在几天内正常连接和工作。我的猜测是,有一段时间的不活动导致了这个问题。似乎AMQP心跳就是为这个问题设计的。我们正在使用SpringAMQP1.3.2.RELEASE,并将ConnectionFactory上的requestedHeartbeat设置为10,但是我们仍然看到连接下降 如果我完全断开与internet的连接并重新连接,或者阻止与防

我试图找出一个问题,即在我们的生产环境中,用户与RabbitMQ的连接被删除。这个问题似乎是在运行了几天之后发生的,通过重新启动我们的应用程序,它似乎可以在几天内正常连接和工作。我的猜测是,有一段时间的不活动导致了这个问题。似乎AMQP心跳就是为这个问题设计的。我们正在使用SpringAMQP1.3.2.RELEASE,并将ConnectionFactory上的requestedHeartbeat设置为10,但是我们仍然看到连接下降

如果我完全断开与internet的连接并重新连接,或者阻止与防火墙的连接,spring amqp客户端将重新连接,但是在生产中发生这种情况时,它甚至似乎不会在日志中抛出异常。当然,这可能是因为我们使用slf4j和logback作为日志机制,而spring使用commons日志,所以它出现在System.out中,而不是进入日志。我已经添加了jcf-over-slf4j桥接器来修复这个问题,但是还没有推出它,所以我没有堆栈跟踪来提供帮助

关于我们架构的另一条信息:我们在RabbitMQ前面有HA代理

我想以某种方式将应用程序置于调试状态,并在eclipse中运行,以查看心跳是否真的停止了。我试图用Wireshark进行验证,但我们的流量有双向SSL加密,我还无法解密流量

有人有什么建议吗?几周来我一直在努力把这个写下来,但我的想法都快用完了。我将非常感谢你的意见


谢谢

2015年2月11日,rabbit发布了支持自动重新连接的3.4.4。您可以像以前一样推出自己的解决方案,但升级到最新版本的rabbit似乎更容易

如果启用了rabbitmq,则1.4之前的Spring AMQP与之不兼容;问题在于rabbit恢复了连接/通道,但Spring AMQP不知道它们。通常,这只会导致额外的连接/通道-Spring AMQP只会建立新的通道。我没有听说它会导致您描述的问题


如果您无法通过修复日志记录配置来解决这个问题,那么另一件事是尝试jstack您的进程,以查看线程正在做什么。但是您应该能够从日志中找到它。

Spring AMQP从一开始就有自己的自动恢复功能;rabbitmq在3.3.0中添加了它,但它与Spring AMQP的恢复不兼容。(当使用Spring AMQP<1.4时)。谢谢!在最新版本中,我们将升级到spring 4.1.4.release和spring rabbit 1.4.3.release。SpringAMQP框架在从大多数故障中恢复方面做得很好,所以我希望继续使用它的恢复机制。事实上,我们的RabbitMQ服务器最近被托管,我们所有的消费者都恢复得很好。谢谢你指出自动恢复连接。谢谢Gary。我们将获得我们的日志补丁,看看我们是否可以捕获更多关于它的信息。如果这对我没有任何帮助,我会试试jstack的建议。当我收集所有数据时,我会在这里更新。谢谢你的建议。