生产者------到--------消息中间件Rabbit

1.生产者数据保存失败,则进行补偿机制。

2.生产者可以保存数据,但是保存后执行代码报错,事务进行回滚,消息已提交到消息中间件,解决办法:

(1)生产者保存的数据存放到日志或redis里,并且消息是有唯一全局ID的。

(2)添加一个消费者补单队列,补单队列与派单队列监听同一个队列,且补单队列先要通过唯一全局ID 查询数据库订单数据是否已保存,如事务回滚了未查询到,则通过日志或redis获取订单数据,并保存订单数据。

如下图:

Rabbit的数据安全保证:

通过使用持久化机制,保存到硬盘里(在生产者里设置)

// 设置消息持久化 PERSISTENT
producer.setDeliveryMode(DeliveryMode.PERSISTENT);

Rabbit-----到-------消费者

1.消费失败

使用自动补偿机制(重试)(每次重试,都查一下缓存看是否已经消费过。)

若重试5次后,消息会放到死信队列

2.解决消费者幂等性问题,防止重复:

使用全局ID ,例如

(1)生产者将MessageID (可订单号作为唯一ID)传入消息里, 并将这个ID缓存起来(日志记录表,Redis等);

(2)消费者先查看缓存(日志记录表,redis等),查看这个ID的状态,是否已经被消费,若未被消费,则消费者消费该消息,若已经消费了,则消费者不消费该消息,并提交告诉Rabbit这个消息已经消费了(手动应答ack,即已签收)

死信队列(备胎队列,跟普通队列思想是一样的)

消息存到死信队列的三种情况:

1.当队列长度已满

2.消息已过期

3.消费者拒绝消息

注意:1.已经创建了消息队列后,不能直接将该消息队列绑定到死信队列,需要重新删除队列,重新创建绑定。

2.消费者报异常,做消费者拒绝消息的操作,消息存到死信队列,给死信队列消费。

三木之Rabbit解决分布式事务数据一致性相关推荐

  1. rabbitmq 查询版本_基于rabbitmq解决分布式事务

    分布式事务要解决的问题是保证二个数据库数据的一致性,本地事务ACID属于刚性事务,基于CAP理论,分布式事务的核心要点柔性事务,最终一致性. 基于rabbitmq解决分布式事务要点如下 生产者采用发送 ...

  2. 分布式事务数据一致性解决方案(一)

    目录 1. 从数据一致性谈起 1.1 数据一致性的情形 1.2 数据一致性的概念 1.3 数据一致性的原理 1.4 数据一致性的协议 2. 分布式服务间的数据一致性 3. 分布式事务一致性解决方案 3 ...

  3. 搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务

    搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务 初步认识RocketMQ的核心模块 rocketmq模块 rocketmq-broker:接受生产者发来的消息并存储(通过调用rocke ...

  4. 分布式事务 - 如何解决分布式事务问题?

    分布式事物 - 如何解决分布式事务问题? 面试题 分布式事务了解吗?你们是如何解决分布式事务问题的? 面试官心理分析 只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑, ...

  5. RocketMQ如何解决分布式事务

    本文来说下RocketMQ如何解决分布式事务 文章目录 基本实现思路 RocketMQ的事务消息状态 代码实例 maven导入 yaml文件配置 核心代码 本文小结 基本实现思路 核心思想:事务消息总 ...

  6. 基于消息中间件解决分布式事务的开源框架Myth

    基于消息中间件的解决分布式事务框架:https://github.com/yu199195/myth 1.rpc框架支持 : dubbo,motan,springcloud. 2.消息中间件支持 : ...

  7. 解决分布式事务,Seata真香

    目录 背景介绍 什么是分布式事务 什么叫做逆向补偿呢 互联网最流行的分布式事务组件seata 总结 背景 大家好,今天给大家分享一个在 2022 年出去面试 Java 几乎必问的一个技术,那就是 se ...

  8. 实战~阿里神器 Seata 实现 TCC模式 解决分布式事务,真香

    今天这篇文章介绍一下Seata如何实现TCC事务模式,文章目录如下: 什么是TCC模式? TCC(Try Confirm Cancel)方案是一种应用层面侵入业务的两阶段提交.是目前最火的一种柔性事务 ...

  9. 基于数据库的事务消息解决分布式事务方案

    转载请注明出处:http://www.cnblogs.com/lizo/p/8516502.html 概述 当单库已不能支撑当前业务的时候,我们往往都考虑进行分库(横向拆分或者纵向拆分).但分库有个无 ...

最新文章

  1. 沃森世界研讨会前瞻:AI服务 了解客户情绪
  2. 关闭所有cloudfoundry应用进程
  3. 【OCP新题库】052最新题库解析-第5题
  4. PIE SDK剔除栅格块算法
  5. GPLT2017题目
  6. OA 办公系统 模块设计
  7. IAR7.51提示秘钥无效IAR 以及 CCDebug驱动(包含win7 64bit)
  8. 不容错过!大咖坐镇直播间,分享主题:智能几何计算
  9. SQL中关于EXISTS谓词的理解
  10. 彩虹屁支持java吗_IDEA版本彩虹屁插件idea-rainbow-fart,一个在你编程时疯狂称赞你的 IDEA扩展插件...
  11. Java字符串分割(split)
  12. python中定制类
  13. Java正则表达式实现计算器_Python利用正则表达式实现计算器算法思路解析
  14. 100个java编程实例_100个java编程实例
  15. java实现删除本地文件夹
  16. 有哪些好用的word文件对比工具
  17. 软件工程的未来发展趋势
  18. 出现HTTPS证书错误原因
  19. Windows安装 choco
  20. 谈谈创业公司给服务器放在云端的优势和缺陷

热门文章

  1. html添加添加只读属性,JavaScript如何将readonly属性添加到input标签
  2. win10无法防问其他计算机没有权限,雨林木风win10系统局域网共享无法访问提示“您可能没有权限使用网络资源”的方案...
  3. linux云服务器怎么选配?如何配置linux云服务器
  4. C# Aggregate 累加器
  5. 网页上传不了文件 服务器错误,网页为何总是出现错误?
  6. [l论文解析]Classifier-Free Diffusion Guidance
  7. Vue中使用自定义过滤器转换Unix时间戳
  8. Pycharm连接远程服务器(图解、简洁高效)
  9. 修改TTF文件或者otf文件或者woff文件内的字体名称
  10. 【Python】输入三角形三条边的长度,输出三角形的面积。