RocketMQ 分布式事务消息过程分析
- 生产环境最小单元高可用部署模式:
如果192.168.3.100的broker假死,那么3.110,3.111的nameserver都能在2分钟内感知broker-a宕机,然后客户端能成功从nameserver处获得最新的路由信息,
如果nameserver假死,出现超时错误,只要broker不宕机,则通过缓存,还是能正常工作的,
但如果nanmeserver,broker一起假死,则上述架构还是无法规避上面的问题。
最佳实践主要包含如下两条:
1、nameserver与broker一定要分开部署,进行隔离。
2、nameserver与客户端的连接,应该在超时后,关闭连接,触发nameserver漂移,需要修改源码。
- Half Message(半消息)
是指暂不能被Consumer消费的消息。Producer 已经把消息成功发送到了 Broker 端,但此消息被标记为暂不能投递
状态,处于该种状态下的消息称为半消息。需要 Producer
对消息的二次确认
后,Consumer才能去消费它。
- 消息回查
由于网络闪段,生产者应用重启等原因。导致 Producer 端一直没有对 Half Message(半消息) 进行 二次确认。这时Brock服务器会定时扫描长期处于半消息的消息
,会主动询问 Producer端 该消息的最终状态(Commit或者Rollback),该消息即为 消息回查。
- A服务先发送个Half Message给Brock端,消息中携带 B服务 即将要+100元的信息。
- 当A服务知道Half Message发送成功后,那么开始第3步执行本地事务。
- 执行本地事务(会有三种情况1、执行成功。2、执行失败。3、网络等原因导致没有响应)
- 如果本地事务成功,那么Product主动向Brock服务器发送Commit,这样B服务就可以消费该message。
- 如果本地事务失败,那么Product主动向Brock服务器发送Rollback,那么就会直接删除上面这条半消息。
- 如果因为网络等原因迟迟没有返回失败还是成功,那么会执行RocketMQ的回调接口,来进行事务的回查(此时由Brock主动发送5)。
详见:浅入浅出-RocketMQ 《浅入浅出》-RocketMQ - 掘金
RocketMQ 消息幂等消费思考逻辑(先登记,再消费)
RocketMQ 分布式事务消息过程分析相关推荐
- Apache RocketMQ 正式开源分布式事务消息
摘要: 近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事 ...
- 消息中间件学习总结(15)——Apache RocketMQ 正式开源分布式事务消息
近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消息, ...
- 分布式事务——消息最终一致性方案
前言 分布式事务一直是服务化拆分后一个绕不开的话题,原来在单体应用中执行的多个逻辑操作,现在被拆分成了多个服务之间的远程调用.虽然服务化为我们的系统带来了水平伸缩的能力,然而随之而来挑战就是分布式事务 ...
- rocketmq分布式事务最终一致性解决方案
背景 分布式系统中,我们时常会遇到分布式事务的问题,如更新订单然后发送短信提醒,但是这两个操作需要操作不同的数据库,那么此时数据库的事务就不能处理好了 传统方式存在的问题: 1.先发送消息,再执行数据 ...
- rocket mq 实现分布式事务消息 以及示例代码
分布式事务的来龙去脉 业务场景:用户A转账100元给用户B,这个业务比较简单,具体的步骤: 1.用户A的账户先扣除100元 2.再把用户B的账户加100元 如果在同一个数据库中进行,事务可以保证这两步 ...
- RocketMQ(九):rocketMQ设计的全链路消息零丢失方案?+rocketmq消息中间件事务消息机制的底层实现原理?+half是什么?+half消息是如何对消费者不可见的?
前言: 目前rocketmq更新已经更新了11篇博客了,预计接下来的2-3篇是暂时的更新进度了,准备更新一下springboot或者是jvm,mysql相关的专题出来,后续更新完事后,再分享一些实战性 ...
- RocketMQ的Producer详解之分布式事务消息(回顾事务)
回顾什么事务 聊什么是事务,最经典的例子就是转账操作,用户A转账给用户B1000元的过程如下: 用户A发起转账请求,用户A账户减去1000元 用户B的账户增加1000元 如果,用户A账户减去1000元 ...
- RocketMQ的Producer详解之分布式事务消息(原理分析)
Half(Prepare) Message 指的是暂不能投递的消息,发送方已经将消息成功发送到了 MQ 服务端,但是服务端未收到生产者对该消息的二次确认,此时该消息被标记成"暂不能投递&qu ...
- RocketMQ 分布式事务
在RocketMQ中生产者有三种角色NormalProducer(普通).OrderProducer(顺序).TransactionProducer(事务),根据名字大概可以看出各个代表着什么作用,我 ...
最新文章
- Java中的BigDecimal类你真的了解吗?
- 某游戏在华为鸿蒙,部分安卓游戏在华为鸿蒙 OS 上运行,被识别成使用 PC 端模拟器...
- Go版本升级后编译出错:Load redeclared in this block
- micropython开发环境_micropython开发者指南
- 再见 CSV,速度提升 150 倍!
- [51CTO]给您介绍Windows10各大版本之间区别
- 操作系统 —— 文件管理
- 构建电商网站业务安全系统,防止“薅羊毛”
- Php jsondb,JsonDB-PHP
- python 白色怎么表示_python – 如何使用pil使用白色背景(透明?)的round_corner标识?...
- Android SlidingMenu开源库及其使用
- 80% 的学校还在给新生上 C 语言,它们 OUT 了吗?
- python 模拟自己的手写字体
- java 数组求极值题目_数组的求极值
- cmd 执行html文件,cmd执行bat文件 cmd文件和bat文件有什么区别?
- 第1讲(数据库软件的配置与游戏数据库的搭建)
- 阿里云因发现Log4j2 核弹级漏洞,未及时上报,被工信部处罚。。
- Mac-记录一些超好用的快捷键
- 《数据结构教程(李春葆主编 第五版)》第七章源代码—树和二叉树
- 2023二建建筑施工备考第二天Day03