平时工作中经常用到queue,但只停于用而不知道原理。对于工作多年码农所忌讳的事。
好。。这里就拿典型的rabbitMQ为研究对象(当然,工作中也一直使用着它)
今天就来说说消息防丢失的事。
首先rabbitMQ消息防丢失有两种手段。
1、事务
2、确认
事务型就不多说了。。类似于DB的事务。。
确认型要设置那些点呢?
1、exchange(交换器)、queue(队列)、msg(消息)都必需设置为持久化
2、consumer(消费方) 设置为手动确认。即autoAck设置为false。 然后开启一个监听ack(确认成功), nack(确认失败)的回调方法。根据自身业务进行再处理。
那么这时rabbitMQ服务器而言,消息分为两类,
第一类,等待投给consumer的消息
第二类,已投给consumer,但还未收到消费者确认信号的消息。
如果 RabbitMQ 一直没有收到消费者的确认信号,并且消费此消息的消费者己经断开连接,则 RabbitMQ会安排该消息重新进入队列,
等待投递给下一个消费者,当然也有可 能还是原来的那个消费者。
3、producter(生产方)开启确认模式(confirm)用来确认MSG是否正确到达rabbitMQ. 开启一个监听ack(确认成功), nack(确认失败)的回调方法。根据自身业务进行再处理。
原文:https://www.cnblogs.com/tywei/p/10897463.html