当前位置: 首页 > news >正文

RabbitMQ消息可靠性保证机制5--消息幂等性处理

RabbitMQ层面有实现“去重机制”来保证“恰好一次”吗?答案是没并没有,而且现在主流的消息中间件都没有实现。

一般解决重复消息的办法是:在消费端让我们消费消息操作具有幂等性。

幂等性问题并不是消息系统独有,而是(分布式)系统中普遍存在的问题。一个幂等操作的特点是,其任意多次执行所产生的影响均与一次执行的影响相同。一个幂等的方法,使用同样的参数,对它进行多次调用和一次调用,对系统产生的影响是一样的。

对于幂等的方法,不用担心重复执行会对系统造成任何改变。

业界对于幂等性的一些常见的做法:

  1. 借助数据库唯一索引,重复插入直接报错,事务回滚。以经典的转账为例,为了保证不重复扣款或者重复加钱,系统维护一张资金变动表,这个表里至少需要记录交易单号、变动账户、变动金额等字段,使用交换单号和变动账号做联合唯一索引(单号一般由上游系统生成保证唯一性)这样如果同一笔交易发生重复请求时就会直接报索引冲突,事务直接回滚,现实中数据库唯一索引的方法通常做为兜底的保证;

  2. 前置检查机制。还以上面的转账为例,当我们在执行更改帐号余额这个动作之前,先检查下资金变动表是否存在这笔交换相关的记录了,如果已经存在,直接返回。否则执行正常的更新余额的动作。为防止并发问题,通常需要借助“排他锁”,我们也可以使用乐观锁或者CAS机制。乐观锁一般会使用扩展一个版本号字段做判断条件。

  3. 唯一ID机制。比较通用的方法。对于每条消息都可以生成唯一的ID,消费前判断交易表中是否存在,消费成功后将状态写入。可以防止重复消费。

http://www.lryc.cn/news/497441.html

相关文章:

  • Claude3.5如何使用?
  • 力扣刷题TOP101:14.BM16 删除有序链表中重复的元素-II
  • 解决github网络慢的问题
  • docker及docker exec命令学习笔记
  • linux环境宝塔服务部署安装及介绍
  • 充分统计量(Sufficient Statistic)概念与应用: 中英双语
  • 基于Matlab计算机视觉的车道线识别与前车检测系统研究
  • 模糊测试中常见的10种变异mutation策略
  • opencv-android编译遇到的相关问题处理
  • 把 py脚本生成windows 可执行的文件
  • 云计算的发展历史与未来展望
  • 基于飞腾S2500处理器的全国产加固服务器
  • gitlab-cicd部署安装与具体操作
  • 2022高等代数上【南昌大学】
  • 文本生成类(机器翻译)系统评估
  • 11.7【miniob】【debug】
  • OSHI 介绍与使用
  • Hadoop生态圈框架部署(八)- Hadoop高可用(HA)集群部署
  • 【RocketMQ】Name Server 无状态特点及如何让 Broker Consumer Producer 感知新节点
  • 蓝牙定位的MATLAB程序,四个锚点、三维空间
  • 机器学习--绪论
  • Unity 设计模式-命令模式(Command Pattern)详解
  • 线程信号量 Linux环境 C语言实现
  • karmada-descheduler
  • 【热门主题】000075 探索嵌入式硬件设计的奥秘
  • Android okhttp请求
  • 嵌入式蓝桥杯学习4 lcd移植
  • 电子应用设计方案-38:智能语音系统方案设计
  • 渗透测试:网络安全的深度探索
  • 基于SpringBoot的“小区物业管理系统”的设计与实现(源码+数据库+文档+PPT)