对于消息丢失的几种情况介绍
1.生产者发送消息到RabbitMQ中,如果没有对应Exchange、或者Exchange没有匹配队列,或者队列没有任何消费者都可能导致消息的丢失
对于发送失败的,我们可以使用生产者确认机制来让发送失败的消息回传给生产者,或者使用备份交换机的方式来处理发送失败的消息
2.rabbitMQ服务重启、关闭、宕机情况下导致的消息丢失
RabbitMQ持久化包括三个部分:Exchange的持久化、Queue的持久化和Message的持久化
我们要持久化消息,则必须持久化Queue,因为Message是存储在Queue上的,如果Queue不持久化的话,Message即便是持久化了,重启服务也会因为没有存储的载体导致Message的丢失
这里注意下,将所有的消息持久化,这样会严重影响RabbitMQ的性能,对于可靠性不是那么高的消息可以不采用持久化来提高系统整体的吞吐量
3.消费者设置autoAck为true,可能导致消费者还没有来得及消费就宕机了,其实也是变相的消息丢失
这个需要我们在消费消息时,设置autoAck为true,同时注意解决消费异常的情况。