问题描述:当消费者端在断网恢复时,在web后台发现,一个队列对应了两个消费者。当出现两个消费者时,生产者投递消息的消费情况为:第一个消息被断网前的消费者(即:老的消费者或者叫无效消费者)消费;第二个消息被断网后新建的消费者消费;即出现上述情况时,消费者端出现消息丢失情况。
解决方案:
1、在消费者端与broker连接时,建立心跳或超时连接。即:当消费者连接超时或没有心跳时,断开连接;以下是:Rabbitmq-c客户端解决方法:
2、解决消息不丢失:
2.1、新建消费者和断网前的消费者同名(即:消费者的tag固定,不用随机值)。
2.2、消费者在消费消息时,要通过ack确认(即:消费者没有确认消息消费不返回ack);
申明:以上为个人分析总结;如有不对欢迎拍砖指正;