RocketMQ 消息去重操作及幂等性设计
16 浏览量
更新于2024-08-30
收藏 193KB PDF 举报
RocketMQ之去重操作
在讨论RocketMQ的去重操作时,需要首先了解RocketMQ的设计理念,即不考虑消息去重的问题,将这个问题抛给业务端自己去处理幂等的问题。因此,作为RocketMQ的使用者,需要自己通过某些方式去保证消息去重。
RocketMQ本身是否提供某些关键信息可以帮助我们去重?从业务上支持幂等的角度来看,RocketMQ不支持消息去重的问题,可以通过设计一层db来解决业务幂等问题,例如通过记录订单id来唯一标识一条消息。这样可以带来严重的吞吐量下降问题。
在设计业务幂等的解决方案时,需要考虑消息的状态,例如NONE、SUCCESS、PROCESS、ERROR等。然后,通过这些状态来设计一个严谨的业务幂等的解决方案。但是,这样做可能会导致整个吞吐量下降非常多,一条消息的消费至少涉及三次db操作,其中两次dbwriter。
在系统架构引入消息队列时,需要解决的问题包括解耦、提高响应速度、流量削峰填谷、数据异构等。特别是在消息的消费速度远远低于生产者的生产速度时,会造成大量的消息堆积,带来的影响是非常严重的。
通过一致性方案、消息去重等方法可以减轻如果组件方突然出事故的情况所带来的生产事故。例如,不通过业务上的各种唯一id来处理消息去重问题,而是基于原先对于RocketMQ的了解,下意识去考虑RocketMQ中的MsgId是否可以作为去重的关键点?具备去重最紧要的首要因素是——>该值可以全局唯一的标识一条消息。
在单机环境下想要生成唯一id是一件非常容易的事,比如通过snowflake算法生成唯一id。但是在分布式环境下,生成唯一id变得非常复杂,需要考虑到分布式环境下的唯一id生成问题。
RocketMQ之去重操作需要从业务上支持幂等的角度来看待,通过设计一层db来解决业务幂等问题,并考虑到消息的状态和唯一标识问题。同时,需要解决系统架构引入消息队列时的各种问题,并减轻如果组件方突然出事故的情况所带来的生产事故。
2018-12-18 上传
2024-11-03 上传
weixin_38746442
- 粉丝: 8
- 资源: 961
最新资源
- StarModAPI: StarMade 模组开发的Java API工具包
- PHP疫情上报管理系统开发与数据库实现详解
- 中秋节特献:明月祝福Flash动画素材
- Java GUI界面RPi-kee_Pilot:RPi-kee专用控制工具
- 电脑端APK信息提取工具APK Messenger功能介绍
- 探索矩阵连乘算法在C++中的应用
- Airflow教程:入门到工作流程创建
- MIP在Matlab中实现黑白图像处理的开源解决方案
- 图像切割感知分组框架:Matlab中的PG-framework实现
- 计算机科学中的经典算法与应用场景解析
- MiniZinc 编译器:高效解决离散优化问题
- MATLAB工具用于测量静态接触角的开源代码解析
- Python网络服务器项目合作指南
- 使用Matlab实现基础水族馆鱼类跟踪的代码解析
- vagga:基于Rust的用户空间容器化开发工具
- PPAP: 多语言支持的PHP邮政地址解析器项目