gpt4 book ai didi

java - RabbitMQ Java 客户端自动重新连接

转载 作者:搜寻专家 更新时间:2023-11-01 01:26:11 25 4
gpt4 key购买 nike

当我的应用程序失去与 RabbitMQ 的连接时,我将其连接工厂设置为自动尝试并重新连接

ConnectionFactory factory = new ConnectionFactory();
factory.setUsername(username);
factory.setPassword(password);
factory.setRequestedHeartbeat(1);
factory.setConnectionTimeout(5000);
factory.setAutomaticRecoveryEnabled(true);
factory.setTopologyRecoveryEnabled(true);

当它试图重新连接时它会阻塞,但一旦再次连接它就不会停止阻塞,我不确定为什么。

我使用的是最新版本的java客户端3.3.4

当我通过rabbitmq管理界面强制断开客户端连接时,似乎也会发生这种情况。

一些进一步的研究似乎是它在尝试获取 channel 时挂起,但网络界面显示已连接 channel 。

最佳答案

总结一下,这是我的答案。

首先,rabbitmq,或者至少是 java 客户端,有一些奇怪的默认属性,有时以秒为单位,有时以毫秒为单位。从我的角度来看,它们的默认值似乎也没有经过深思熟虑。例如connectionTimeout的默认值为0,表示永远等待。

您还应该将 networkRecoveryInterval 属性设置为您环境中的一些有用值。

要获得导致 channel 关闭的更多信息,请实现 ShutdownListener - 即使它只是打印异常,它也会帮助您找出导致错误的原因。

为了测试连接的自动恢复,我在客户端使用了 ip tables 命令。然后你也可以在rabbitmq.log中看到server端发生了什么

并且不要忘记调整 requestHeartbeet 属性,在我的设置中它总是超过 5 秒,默认值在一些客户端实现中是 580 秒,这看起来也有点奇怪,记住这一点.

无论如何,即使你在集群中运行rabbitmq,它在不可靠的网络上也不能很好地工作。也许您对此感兴趣的更多,而不是我建议您查看 documentation .

关于java - RabbitMQ Java 客户端自动重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24939398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com