nosql-rabbitmq-消息可靠性
nosql-rabbitmq-消息可靠性、幂等性
1.1 消息发送到Broker
出现失败的原因: 例如设备故障等导致消息发送失败,生产者不能确定Broker有没有正确接收。这就需要给生产者发送消息的接口一个应答。 解决方案: 1) 事务模式 2) Confirm模式 分两种: 一种是消息不可达时,把不可达消息写到文本文件中。 二种:消息不可达,把不可达消息写到备份交换机中。(最好方式)
消息队列中存储
导致原因: 重启可能导致内存消息消失,这就要把消息本身和元数据(队列,交换机,绑定)都保存到磁盘。
解决方案: 1)队列持久化 2)交换机持久化 3)消息持久化
1.4 消息投递到消费者
1) 自动Ack 2)手动Ack
1.5 消费者回调(根据业务来 重点)
从生产者到Broker,交换机到队列,队列本身,队列到消费者,都有响应的方法知道msg是否正常流转。但是服务端收到ack或者nack之后,生产者知道吗?根据经验是不知道的。但是如果为了保证一致性,生产者必须知道消费者有没有成功消费,怎么办? 这个是需要从业务层面来进行,两种方式: (1)回调,消费者收到消息,处理完毕后,调用生产者的API。 (2)消费者发送一条响应消息给生产者。
1.6 补偿机制
如果生产者的API没有被调用,也没有收到消费者的响应消息,该如何做? 这时候可以稍微等一下,可能是消费者处理时间太长或者网络超时,超时之后还没有得到响应的消息才确定为失败,消费失败以后重发消息。 但是问题又来了,谁来发,多久发一次,一共发几次,发一模一样的消息吗?消费者如何进行幂等呢
本文来自博客园,作者:Raymon撸码记,转载请注明原文链接:https://www.cnblogs.com/RaymonGoGo/p/16563383.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?