rabbitMQ消息丢失

丢失的3种情况:

1.生产者在发送给MQ时因网络问题或其他问题丢失。

2.MQ暂存,后还没消费,就挂掉,导致丢失。

3.消费者没来得及处理,就挂了,MQ还以为已经消费了。


解决方法:

1.生产者:a. 开启rabbitMQ事务同步,造成阻塞,耗性能,不推荐。

b.开启confirm机制,异步,生成消息时会生成一个唯一的ID,mq收到消息后回传一个ack ,告诉生产者消息处理成功。如果失败,回调nack接口。超时,生产者重发。


2.rabbitMQ: 开启消息持久化。

消息补偿机制:生产端首先将业务数据以及消息数据入库,需要在同一个事务中,消息数据入库失败,则整体回滚。

根据消息表中消息状态,失败则进行消息补偿措施,重新发送消息处理


3.消费者关闭自动ACK确认机制

使用rabbitmq提供的ack机制,服务端首先关闭rabbitmq的自动ack,然后每次在确保处理完这个消息之后,在代码里手动调用ack。这样就可以避免消息还没有处理完就ack。

这样就解决了,即使一个消费者出了问题,但不会同步消息给服务端,会有其他的消费端去消费,保证了消息不丢的case。

http://t.csdn.cn/Xj8BM

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容