前言
我在工作中,使用到消息中间件MQ的业务还是挺多的,我从事在一家交通行业的公司,业务中经常会涉及处理一些违法数据的场景,项目中经常会使用到RabbitMQ,今天想跟大家聊聊怎样避免消息丢失和重复消费是问题。
在我们发生消息的时候,如果MQ服务器突然宕机了会出现什么情况?是不是我们发过去的消息全部没有了吗?
是的,一般MQ中间件为了提高系统的吞吐量会把消息保存在内存中,如果不作其他处理,MQ服务器一旦宕机,消息将全部丢失。这个是业务不允许的,造成很大的影响。
在遇到这种问题的时候,一般有以下几种处理方式。
如何避免消息丢失
持久化
RabbitMQ中发消息的时候会有个durable参数可以设置,设置为true,就会持久化。
这样的话MQ服务器即使宕机,重启后磁盘文件中有消息的存储,这样就不会丢失了吧。是的这样就一定概率的保障了消息不丢失。
但还会有个场景,就是消息刚刚保存到MQ内存中,但还没有来得及更新到磁盘文件中,突然宕机了。这个场景在持续的大量消息投递的过