rabbitmq消息丢失问题
1. 丢失消息场景
(1)生产者写消息网络丢失
(2)rabbitmq收到消息,mq故障
(3)消费者收到消息后,消费者故障
2. 对应处理方案
(1)生产者弄丢了数据
<1> 基于事务,rabbitmq报错,则回滚重发
问题:事务机制,是同步的,会卡主等待消息发送成功,会导致生产者发送消息的吞吐量下降
<2> confirm模式,生产者发送一个消息,就不用管了
rabbitmq收到消息后,会回调生产者本地接口,通知收到
rabbitmq收到消息波按错会回调生产者本地接口,通知接受失败,可以重发
优点:可以直接发下一条消息,非阻塞 异步,吞吐量高
(2)rabbitmq弄丢数据
让rabbitmq把消息持久化到磁盘(持久化元数据 + 持久化数据)
但会出现rabbitmq收到消息还未持久化到磁盘,rabbitmq挂了,仍然会丢失数据,但可能性已下降很多
(3)消费者弄丢数据
消费者拿到数据后,会通知rabbitmq数据已接收,但还没处理此时消费者宕机,会出现消息丢了 (rabbitmq以为已经处理完成)
解决方案:消费者端,关闭autoAck,在确实处理完数据后,再向rabbitmq发送ack
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律