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

RocketMQ事务消息机制原理

RocketMQ工作流程

在RocketMQ当中,当消息的生产者将消息生产完成之后,并不会直接将生产好的消息直接投递给消费者,而是先将消息投递个中间的服务,通过这个服务来协调RocketMQ中生产者与消费者之间的消费速度。

那么生产者是如何投递自己的消息呢?这里向大家介绍一下RocketMQ当中的一个重要组件,topic。Topic,故名思意,主题嘛,消息生产者在生产投递消息的过程中,可以通过设定不同的topic将自身所生产的消息,投递到对应的topic当中。举一个通俗易懂的例子,我们可以把topic想象成是一个货物仓库,而topic是一个货架,对应的种类的物品要放到对应的货架上。

消费者则根据自身的需求,通过不同的topic来获取自己想要消费的消息。

RocketMQ事务消息的实现

RocketMQ事务消息的实现,其实也是非常的简单,我们只需要弄清一个原理即可,即分阶段实现。在RocketMQ当中,想要实现分阶段实现这一功能,首先要实现一个机制,就是TransactionListener--事务监听机制。事务监听机制有两个重要的方法,即executeLocalTransaction(执行本地事务),checkLocalTransaction(回查本地事务)。

RocketMQ事务消息的流转过程其实也是十分简单。首先,消息事务生产端会生生一个half消息即半消息,和正常一样,生产者也是要将这个消息投递到Broker当中,但这个Broker当中用来接收这个半消息的topic和普通的topic并不一样,我们将这种用来接收生产者生产的half消息投递的topic称为half topic。特别注意,half topic对消费者来说是不可见的,即消费者无法直接从half topic当中获取信息进行消费。

那么如何将half topic当中的消息转移到正常的topic当中,让消费者能够消费呢?

首先,当Broker当中的半topic接收到这个半消息后,Broker便会返回一个ack给生产者,生产者接收到这个ack后,便会开始执行本地事务。执行本地事务后,会产生两种结果,一种执行成功一种执行失败。

事务执行成功

当本地事务执行成功之后,生产者便会将本地事务执行成功的状态提交个Broker,当Broker接收到这个信息时,便会将半topic当中的半消息给拿出来,放到目标topic当中,供消费者能够进行正常消费。

事务执行失败

若当本地事务执行的过程中产生异常或者没有执行成功,生产者则会将事务进行回滚并会给Broker返回一个Rollback状态,当Broker接收到Rollback这个状态时,便会将半topic中的消息进行逻辑删除,并且RocketMQ还会通过异步的方式单开一个线程,用来接收这种被Broker逻辑删除的消息,并将这些消息进行清除。

事务执行成功但无状态

若本地事务执行成功,但由于网络波动,本地事务的执行状态未及时反馈给生产者或生产者迟迟未接收到本地事物的状态,即处于无状态或中间态的情况下,Broker便会启动一个定时回查任务。Broker会调用事务监听器当中的checkTransaction接口,来查看当前事务的状态,根据回查的状态结果,来进行相应的操作。这个事务回查机制,有次数限制,默认回查十五次,超过十五次后,便不会再来回查本地事务的状态了。

总结

以上便是RocketMQ中事务消息的整个流程,笔者也将流程图置于下方,希望能够给各位小伙伴带来帮助。笔者小,中,大厂均有面试经验,目前正在从事全栈开发工作,主要分享java全栈开发知识与相关的面试真题,希望能够给大家带来帮助,同大家共同进步。

相关文章:

RocketMQ事务消息机制原理

RocketMQ工作流程 在RocketMQ当中,当消息的生产者将消息生产完成之后,并不会直接将生产好的消息直接投递给消费者,而是先将消息投递个中间的服务,通过这个服务来协调RocketMQ中生产者与消费者之间的消费速度。 那么生产者是如何…...

【C++】选择结构- 嵌套if语句

嵌套if语句的语法格式&#xff1a; if(条件1) { if(条件1满足后判断是否满足此条件) {条件2满足后执行的操作} else {条件2不满足执行的操作} } 下面是一个实例 #include<iostream> using namespace std;int main4() {/*提示用户输入一个高考分数&#xff0c;根据分…...

scrapy解决管道阻塞问题采用threadpool库线程池+twisted同步语法异步编程

实现方法&#xff1a;process_item和download任务函数像下面编写即可&#xff0c;其他管道像往常一样写法 import time import threadpool import random from twisted.internet import deferclass VideoPipeline:def __init__(self):self.pool threadpool.ThreadPool(10) # …...

Axure RP:打造动态交互的大屏可视化设计利器

Axure大屏可视化是指使用Axure RP这款原型设计工具来创建具有视觉冲击力和数据展示功能的大屏幕界面。Axure以其强大的交互设计和丰富的组件库&#xff0c;成为了实现大屏可视化的重要工具之一。以下是对Axure大屏可视化的详细阐述&#xff1a; 一、Axure在大屏可视化中的优势 …...

“八股文”在实际工作中是助力、阻力还是空谈

目录 1.概述 1.1.对实际工作的助力 1.2.存在的问题 2.“八股文”对招聘过程的影响 2.1.“八股文”在筛选候选人时的作用 2.2.面试中的比重及其合理性 2.3.如何平衡“八股文”与实际编程能力的考察 3.“八股文”在日常工作中的实用价值 3.1.在团队协作环境中进行有效沟…...

项目开发:@ControllerAdvice注解的基本应用

目录 简介基本用法全局异常处理全局拦截器全局数据绑定 注解参数1.value(): String[]2.basePackages(): String[]3.basePackageClasses(): Class<?>[]4.assignableTypes(): Class<?>[]5.annotations(): Class<? extends Annotation>[] 三.注解组成总结 简…...

Jmeter三种方式获取数组中多个数据并将其当做下个接口参数入参【附带JSON提取器和CSV格式化】

目录 一、传统方式-JOSN提取器获取接口返回值 1、接口调用获取返回值 2、添加JSON提取器 3、调试程序查看结果 4、添加循环控制器 5、设置count计数器 6、添加请求 7、执行请求 二、CSV参数化 1、将结果写入后置处理程序 2、设置循环处理器 3、添加CSV文件 4、设置…...

C++入门基础:C++中的循环语句

循环语句是编程语言中用来重复执行一段代码直到满足特定条件的一种控制结构。它们对于处理需要重复任务的场景非常有用&#xff0c;比如遍历数组、累加数值、重复执行某项操作直到满足条件等。 但是在使用循环语句的时候需要注意下哈&#xff0c;有时候一不小心会构成死循环或者…...

VUE 基础(二)

1 v-show:根据表达值的真假&#xff0c;切换元素的显示和隐藏 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…...

VMware Cloud Foundation ESXi 主机

一、准备嵌套 ESXi 主机环境# 1)物理 ESXi 主机信息 本次准备用于部署 VCF 嵌套实验环境的物理宿主机的配置信息如下图所示。其实,部署 VCF 环境主要对内存的大小要求比较高,部署完整的管理域相关组件下来差不多就要占用 200 GB左右内存,而对 CPU 和存储的需求可以根据实…...

PyTorch深度学习快速入门(下)

PyTorch深度学习快速入门&#xff08;下&#xff09; 一、现有网络模型的使用及修改&#xff08;一&#xff09;背景知识&#xff08;二&#xff09;修改网络模型的三种方法 二、网络模型的保存与加载&#xff08;一&#xff09;保存网络模型的两种方法&#xff08;二&#xff…...

轻松入门Linux—CentOS,直接拿捏 —/— <1>

一、什么是Linux Linux是一个开源的操作系统&#xff0c;目前是市面上占有率极高的服务器操作系统&#xff0c;目前其分支有很多。是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统 Linux能运行主要的UNIX工具软件、应用程序和网络协议 Linux支持 32…...

pandas安装以及导入CSV

安装pandas pip install pandas速度慢可以切换国内镜像源 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas执行导入csv操作 import pandas as pd# 读取csv文件 data pd.read_csv(yourPath)输入data查看数据 导入成功&#xff01;...

新能源车浪潮来袭,同时存在高压低压系统,如何准确进行高低压布线间距EMC分析?

摘要 随着车辆电气化水平的逐步提升&#xff0c;电气零部件布局和布线面临着前所未有的挑战&#xff0c;在不断的压缩电气零部件间间距后&#xff0c;EMC性能成为非常关键的性能指标。特别是对于新能源车型&#xff0c;同时存在高压和低压系统&#xff0c;高低压耦合若处理的不…...

QUIC 协议

详解 QUIC 协议&#xff1a;它为何比 TCP 更优越&#xff1f;...

【软件测试】--接口测试

1. 接口用例设计 接口测试的测试点 功能测试 单接口功能&#xff1a; 手工测试中的单个业务模块&#xff0c;一般对应一个接口 登陆业务 --> 登陆接口加入购物车业务 --> 加入购物车接口订单业务 --> 订单接口支付业务 --> 支付接口 借助工具、代码。绕开前端界面…...

【前端】上传视频,截取第一帧图片

使用input上传视频&#xff0c;获得视频的第一帧 参考&#xff1a;JavaScript获取视频的尺寸信息和第一帧图片 - 掘金 (juejin.cn) html&#xff1a; <inputbind:this{uploadRef}on:change{handleUpload}accept"video/*"type"file"/>视频类型校验&a…...

Redis-GEO数据结构的基本用法

GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xff0c;包含&#xff1a;经度…...

【Linux C | 网络编程】进程池大文件传输的实现详解(三)

上一篇实现了进程池的小文件传输&#xff0c;使用自定义的协议&#xff0c;数据长度数据本身&#xff0c;类似小火车的形式&#xff0c;可以很好的解决TCP“粘包”的问题。 【Linux C | 网络编程】进程池小文件传输的实现详解&#xff08;二&#xff09; 当文件的内容大小少于…...

Mac如何通过SSH连接Github

目录 前言 一、实现步骤 1.生成 SSH 密钥对 2.添加 SSH 密钥到 GitHub&#xff1a; 3.配置 SSH 连接 1.更新远程仓库 URL 2.测试 SSH 连接 前言 GitHub 在 2021 年 8 月 13 日停止了对使用密码进行身份验证的支持。因此&#xff0c;你需要使用其他认证方式&#xff0c;如…...

Llama-3.2V-11B-cot效果展示:识别艺术海报中风格与主题逻辑断层

Llama-3.2V-11B-cot效果展示&#xff1a;识别艺术海报中风格与主题逻辑断层 1. 工具介绍 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具。该工具针对双卡4090环境进行了深度优化&#xff0c;特别适合需要分析复杂视觉内容的场景&…...

别再用PS硬P了!用Python+OpenCV实现泊松融合,5分钟搞定图片无缝拼接

告别PS繁琐操作&#xff1a;5行Python代码实现专业级图片融合 每次在Photoshop里手动调整图层蒙版、反复擦除边缘时&#xff0c;你是否想过——数字图像处理应该更智能&#xff1f;2023年&#xff0c;我们完全可以用代码自动化完成这些重复劳动。本文将带你用PythonOpenCV实现泊…...

Phi-4-mini-reasoning部署避坑指南:CUDA OOM、端口映射、STARTING卡顿全解析

Phi-4-mini-reasoning部署避坑指南&#xff1a;CUDA OOM、端口映射、STARTING卡顿全解析 1. 模型简介 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个模型主打"小参数、强推理、长上下文、…...

Qwen3视觉黑板报辅助数据库课程设计:ER图与数据关系可视化

Qwen3视觉黑板报辅助数据库课程设计&#xff1a;ER图与数据关系可视化 你是不是也经历过这样的场景&#xff1f;面对《数据库课程设计》这门课&#xff0c;老师布置了一个“图书管理系统”或者“学生选课系统”的题目&#xff0c;你脑子里有一堆想法&#xff0c;但就是不知道该…...

6 鸿蒙应用启动速度优化全流程拆解 | 鸿蒙开发筑基实战

6 鸿蒙应用启动速度优化全流程拆解 | 鸿蒙开发筑基实战 作者&#xff1a;杨建宾&#xff08;华夏之光永存&#xff09; 摘要 本文面向鸿蒙应用开发工程师&#xff0c;聚焦应用启动慢、首屏白屏等核心痛点&#xff0c;拆解从代码配置到资源处理的全流程优化方案。内容包含启动流…...

昆明波纹管供应商哪个好

在市政排水、农田灌溉、通信保护等工程领域&#xff0c;HDPE双壁波纹管因其优异的环刚度、耐腐蚀性和施工便捷性&#xff0c;已成为不可或缺的关键建材。然而&#xff0c;面对市场上琳琅满目的供应商&#xff0c;尤其是在地质气候条件独特的西南地区&#xff0c;如何选择一个真…...

Apache NiFi数据质量管理的终极指南:如何构建强大的验证规则与异常检测系统

Apache NiFi数据质量管理的终极指南&#xff1a;如何构建强大的验证规则与异常检测系统 【免费下载链接】nifi Apache NiFi 项目地址: https://gitcode.com/gh_mirrors/ni/nifi Apache NiFi是一个强大的数据流自动化平台&#xff0c;专门用于数据集成和数据流管理。在当…...

3个核心方案:开源工具ncmdumpGUI如何让网易云音乐文件自由播放

3个核心方案&#xff1a;开源工具ncmdumpGUI如何让网易云音乐文件自由播放 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 当我们下载了心爱的音乐&#xff0c…...

方寸陶瓷藏乾坤:百能云板用陶瓷基板四大核心工艺,赋能万物互联时代

当你驾驶新能源汽车平稳穿梭在城市街巷&#xff0c;当深夜的 LED 路灯精准照亮回家的路&#xff0c;当手机人脸识别瞬间解锁生活便捷 —— 你或许不会想到&#xff0c;这些场景的背后&#xff0c;都离不开一块 “隐形基石”&#xff1a;陶瓷散热基板。作为电子设备的 “散热心脏…...

电影票销售管理|基于springboot + vue电影票销售管理系统(源码+数据库+文档)

电影票销售管理系统 目录 基于springboot vue电影票销售管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue电影票销售管理系统 一、前言 博主…...