本章介绍客户端与服务端由于服务端重启、网络抖动等原因造成网络连接断开时,如何在客户端设置网络自动恢复。4.0.0及以上版本的Java客户端默认支持网络自动恢复,无需设置。
说明如果应用程序使用Connection.Close方法关闭连接,则不会启用或触发网络自动恢复。
触发自动恢复的场景
以下场景,会触发网络自动恢复:
- 在连接的I/O循环中抛出未处理的异常
- 检测到Socket读取超时
- 检测到服务端心跳丢失
重试连接示例代码
客户端和服务端的初始连接失败,不会触发自动恢复,建议您编写对应的应用程序代码,通过重试连接来解决初始连接失败的问题。
以下示例演示了使用Java客户端通过重试连接解决初始连接失败的问题。
ConnectionFactory factory = new ConnectionFactory();
// enable automatic recovery if using RabbitMQ Java client library prior to version 4.0.0.
factory.setAutomaticRecoveryEnabled(true);
// configure various connection settings
try {
Connection conn = factory.newConnection();
} catch (java.net.ConnectException e) {
Thread.sleep(5000);
// apply retry logic
}