RocketMQ消费者实践
最近工作中用到了RocketMQ,现记录下,如何正确实现消费~
- 消费者需要注意的问题
- 防止重复消费
- 如何快速消费
- 消费失败如何处理
- Consumer具体实现
- 防止重复消费
重复消费会造成数据不一致等问题。所以,消费者要做到消费幂等。
1)每次消费,记录messageId;如果再次消费该message,查询messageId是否已存在,已存在,就跳过消费;
2)使用具体业务状态来防止重复消费,例如如果状态已经被变更,说明已有消息被消费;
- 如何快速消费
消费过程缓慢,势必会造成消息积压,如何提高消费速度势必比较重要:
每次接收到消息后,不做处理(具体不一定,最好是简单),直接将消息保存到本地数据库,然后后台异步处理消息,这么做的好处:
1) 快速消费,如果消费过程比较耗时(大量更新,RPC调用等),可以将消息插入本地,然后后台异步消费,消费完成,更新本地消息状态。
2)失败可控,如果某条消息消费失败,不依赖于mq的重试机制,可以定时重跑消费失败的消息,或者人工触发重试消费。
- 消费失败如何处理
消费过程不能保证不出异常,虽然mq消费失败有重试机制,但我们并没有这么做,而是:
跟上面提到的一样,由于已经把消息存到了本地,消费失败,也不用担心,后台重跑即可~~~~
如果大家觉得上面说的哪方面有问题,或者有更好的实践,欢迎留言~~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构