分布式消息服务RABBITMQ版-实现RabbitMQ节点重启后消费者自动重连:方案概述
方案概述
RabbitMQ的amqp-client虽然自带重连机制,但是自带的重连机制只会重试一次,重连失败后就不再执行。这时如果消费者没有做额外的重试机制,那么这个消费者就彻底断开与服务端的连接,无法消费消息。
amqp-client在节点断连后,根据与通道建立的节点不同,产生不同的错误。
- 如果通道连接的是队列所在的节点,消费者就会收到一个shutdown信号。这时amqp-client的重连机制就会生效,尝试重新连接服务端。如果连接成功,这个通道就会继续连接消费。如果连接失败,就会执行channel.close方法,关闭这个通道。
- 如果通道连接的不是队列所在的节点,消费者不会触发关闭动作,而是由服务端发送的一个取消动作。这个动作对amqp-client来说并不是异常行为,所以日志上不会有明显的报错,但是连接最终还是会关闭。
amqp-client出现上面两种错误时,会分别回调handleShutdownSignal以及handleCancel方法。您可以通过重写这两种方法,在回调时执行重写的重连逻辑,就能在通道关闭后重新为消费者创建新的通道继续消费。
- 分布式消息中间件实战_分布式消息实战_分布式消息-华为云
- 为什么要使用RabbitMQ_RabbitMQ如何实现高可用性_分布式消息-华为云
- RabbitMQ如何保证消息的可靠性_分布式消息系统_分布式消息RabbitMQ-华为云
- 分布式消息服务有哪些_分布式消息服务哪个好_分布式消息-华为云
- 分布式消息中间件的作用_分布式消息中间件_分布式消息-华为云
- 分布式消息队列是什么_分布式消息队列好处_消息队列-华为云
- RabbitMQ镜像下载
- Kafka与其他消息队列的对比_什么是Kafka_分布式消息系统-华为云
- 分布式消息服务优势_分布式消息服务_消息队列-华为云
- Kafka架构_Kafka如何实现负载均衡_Kafka数据存储方式-华为云