消息队列如何处理重复消息?

对于平常的业务而言,消息重复一般是不可避免的,我们只能在业务上来处理重复消息所带来的影响。

为了保证同一条消息无论被消费多少次,它的结果都是一样的,需要让消费者的处理逻辑具有幂等性。

为了实现幂等处理重复消息,可以给每条消息分配一个全局的唯一ID,当消费者接收消息时,先检查一下这个ID是否已经处理,如果已经处理则直接返回,如果没有处理,则执行逻辑并记录一下ID。

除了分配全局唯一ID,对于订单数据来说,还可以设计一个严格的状态流转(比如:待支付→已支付→待发货→已发货),这样在每次处理消息前对当前状态进行检查,看是否符合操作条件。

相关推荐
裕晟资质规划几秒前
三类涉密资质延续时限差异分析:军工60日与集成印制3个月的边界
java·服务器·前端·网络·安全
念念清晰2 分钟前
000-OpenJDK17 源码构建:MacOS环境(M芯片)
java·后端
ShineWinsu8 分钟前
对于JavaScript:JavaScript基础语法的解析
开发语言·前端·javascript·面试·web·基础语法·循环
Wang's Blog25 分钟前
Java 项目实战: 交友项目 - 百度人脸识别入门案例
java·百度·交友
普通人61 小时前
php+html+canvas实现树状打开的结构
开发语言·javascript·html5·1024程序员节
wuminyu1 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
电商API_180079052471 小时前
反向海淘多币种结算:汇率该在哪个时点被冻结
java·开发语言·数据库·跨境电商·1688 api
开开心心就好2 小时前
多份文档怎么批量打印?支持多种格式
java·服务器·开发语言·pdf·ocr·散列表·启发式算法
Want5952 小时前
Python炫酷烟花①
开发语言·python
Pniubi2 小时前
模拟一个充值送token怎么保证幂等?一致性?原子性?
java