最新RocketMQ高手之路系列之八:RocketMQ之事务消息(一),最新整理

最后总结

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取


事务的概念就不用多说了,我相信阅读文章的童鞋都是有着非常深刻的认识。我们都知道MQ可以实现微服务之间的异步以及解耦,那么引入MQ之后,如何实现微服务之间的数据一致性是一个值得思考的问题。事务消息将分为三篇文章进行介绍,本文主要介绍RocketMQ的事务原理,第二篇文章主要分析事务消息源码实现分析。在第三篇文章中将提供一种优化方案,解决RocketMQ对于业务代码侵入较大的问题。

  • RocketMQ事务原理

  • 总结

一、RocketMQ事务原理

1、消息发送问题分析

为了方便大家理解,我们以日常生活中的订单服务来进行原理的说明。当我们支付订单之后,我们账户的购物积分也会进行相应的积分调整。我们结合下面的订单服务、RocketMQ、积分服务的简化交互图来看下,如果没有事务消息,这样的服务间交互有没有问题。

在这里插入图片描述

可能有的童鞋会说,这不是很简单嘛,肯定是订单服务先执行本地事务,更新订单信息。然后再发消息到MQ中,积分服务消费消息更新积分啊。但是事实上并没有这么简单。

如果我们订单服务直接更新的了订单信息并进行持久化,而后在发送订单信息到MQ中。如果此时MQ服务不可用,消息发送报错,无法将订单消息发到MQ中,也就意味着积分服务不能收到订单信息,也就不会进行相应的积分操作。此时就会出现订单信息与积分信息数据不一致的问题。那么RocketMQ是怎么解决这个问题的呢?

2、半消息

实际上RocketMQ提供了一种half消息的机制,订单服务发送half消息到MQ中,这个half消息是不被消费者所见的。怎么理解这个half信息呢,按照我自己的理解,就是它实现了一半的消息功能,只在生产端可见,在消费端不可见。那么这个half消息是怎么实现在MQ中不被积分服务所见的呢?

订单服务发送half消息,并不是将消息投递到积分服务订阅的topic,而是将消息投递到RocketMQ中的RMQ_SYS_TRANS_HALF_TOPIC对应的messeageQueue。由于积分服务并没有订阅这个Topic,所以这个消息对于积分服务是不可见的。

另外有个OP_TOPIC用于记录对应half消息的commit/rollback状态。大致的交互如下如所示:

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

image

image

image

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

资料的朋友,可以点击这里获取](https://bbs.youkuaiyun.com/forums/4f45ff00ff254613a03fab5e56a57acb)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值