RabbitMQ Java客户端自动重新连接

 彩色蜗牛 发布于 2023-01-01 12:41

当我的应用程序失去与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管理界面强制断开客户端连接时,似乎也会发生这种情况.

一些进一步的研究看起来像它正试图获得一个频道,但网络界面说有一个频道连接.

1 个回答
  • 把它们包装在一起,这是我的答案.

    首先,rabbitmq,或者至少是java客户端,有一些奇怪的默认属性,有时是几秒钟,有时是几毫秒.从我的观点来看,它们的默认值似乎也没有考虑过.例如,connectionTimeouts默认值为0,表示等待永远.

    您还应该networkRecoveryInterval在您的环境中将属性设置为某个有用的值.

    要获得有关导致通道关闭的更多信息,请执行ShutdownListener- 即使它只是打印异常,它也可以帮助您找出导致错误的原因.

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

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

    无论如何,即使您在群集中运行rabbitmq,它也不能在不可靠的网络上运行良好.也许你对此有更多的兴趣,而不是建议你查看文档.

    2023-01-01 12:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有