消息中間件之RocketMQ源碼分析(二十四)

事務消息

事務消息機制。
事務消息的發送和處理總結為四個過程:
1.生產者發送事務消息和執行本地事務
2.Broker存儲事務消息
3.Broker回查事務消息
4.Broker提交或回滾事務消息

生產者發送事務消息和執行本地事務。

在這里插入圖片描述

發送過程分為兩個階段:
第一階段,發送事務消息
第二階段,發送endTransaction消息
事務消息發送過程的實現類TransactionMQProducer,該類繼承魚DefaultMQProducer,不僅能發送事務消息,還能發送其他消息。雖然4.2.0版本有事務消息代碼,但實際是4.3.0版本才全面支持事務消息。

TransactionMQProducer的核心屬性和方法:

  • transactionListener:事務監聽器,主要功能是執行本地事務和執行事務回查。事務監聽器包含executeLocalTransaction()和checkLocalTransaction()兩個方法。executeLocalTransaction()方法執行本地事務,checkLocalTransaction()方法是當生產者由于各種問題導致未發送Commit或Rollback消息給Broker時,Broker回調生產者查詢本地事務專改的處理方法
    在這里插入圖片描述
    在這里插入圖片描述
  • executorService:Broker回查請求處理的線程池
    +
  • start():事務消息生產者啟動方法,與普通啟動方法不同,增加了this.defaultMQProducerImpl.initTransactionEnv()的調用,即增加了初始化事務消息的環境信息
    在這里插入圖片描述
    事務消息的環境初始化主要用于初始化Broker回查請求處理的線程池,
    在初始化事務消息生產者時我們可以指定初始化對象,如果不指定初始化對象,那么這里會初始化一個單線程的線程池
    在這里插入圖片描述
  • shutdown():關閉生產者,回收生產者資源。該方法時啟動方法的逆過程,功能時關閉生產者、銷毀事務環境。銷毀事務環境是指銷毀事務回查線程池,清楚回查任務隊列
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述

生產者發送事務消息主要分為如下兩個階段:

1.發送Half消息的過程
2.發送Commit或Rollback消息

發送Half消息的過程。

事務消息的發送是通過sendMessageInTransaction()方法來完成的
在這里插入圖片描述

  • 第一步,數據校驗,判斷TransactionListener的值是否為null、消息Topic為空檢查、消息體為空檢查等
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述
  • 第二步:消息預處理。預處理的主要功能是在消息擴展字段中設置消息類型。MessageConst.PROPERTY_TRANSACTION_PREPARED表示當前消息是事務Half消息。MessageConst.PROPERTY_PRODUCER_GROUP用于設置發送消息的生產者組名,以及設置事務消息的擴展字段
    在這里插入圖片描述
  • 第三步:發送事務消息,調用同步發送消息的方法將事務消息發送出去
    在這里插入圖片描述
    在這里插入圖片描述

發送Commit或Rollback消息

在本地事務處理完成后,根據本地事務的執行結果調用DefaultMQProducerImpl.endTransaction()方法
通知Broker進行Commit或Rollback

當前Half消息發送完成后,會返回生產者消息發送到哪個Broker、消息位點是多少、再根據本地事務的執行
結果封裝EndTransactionRequestHeader對象,最后調用MQClientAPIimpl.endTransactionOneway()方法
通知Broker進行Commit或Rollback
在這里插入圖片描述
在這里插入圖片描述

  • brokerAddr:存儲當前Half消息的Broker服務器的socket地址
  • localTransactionState:本地事務執行結果
  • transactionId:事務消息的事務id
  • endTranactionOneway():以發送oneway消息的方式發送該RPC請求給Broker.

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711189.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Expression Language (SpEL)

Spring 表達語言(SpEL),支持在運行時查詢和操作對象圖,可以用于數據綁定、屬性訪問、方法調用等。使用SpEL可以簡化代碼并提高應用程序的可維護性。 1 概覽 SpelExpressionParser是SpEL的一個核心組件,負責解析和編譯…

CentOS安裝編譯Python3.11.6

CentOs自帶python2版本太低,項目需要python3,于是自己安裝python 操作指南: 重新下載源代碼: # 刪除舊的 Python 源代碼文件(如果有) rm -rf Python-3.11.6.tar.xz # 下載 Python 3.11.6 的源代碼文件 wget…

Java泛型簡介

Java泛型簡介 Java泛型是在Java 5中引入的一個特性,它允許程序員在編譯時指定類、接口或方法能夠接受的類型。泛型的主要目的是提供編譯時類型安全檢查,避免在運行時因為類型轉換錯誤而導致的ClassCastException。 在沒有泛型之前,Java中的集…

如何利用動態靜態代理IP實現跨地域網絡營銷與市場研究

動態代理IP和靜態代理IP都可以在跨地域網絡營銷與市場研究中發揮關鍵作用,具體實現方式如下: ### 動態代理IP的應用: 1. 跨地域營銷活動測試: - 在進行網絡營銷時,尤其是要驗證廣告投放、SEO效果或A/B測試不同地區用戶…

Ubuntu系統使用Docker搭建Jupyter Notebook并實現無公網ip遠程連接

文章目錄 1. 選擇與拉取鏡像2. 創建容器3. 訪問Jupyter工作臺4. 遠程訪問Jupyter工作臺4.1 內網穿透工具安裝4.2 創建遠程連接公網地址4.3 使用固定二級子域名地址遠程訪問 本文主要介紹如何在Ubuntu系統中使用Docker本地部署Jupyter Notebook,并結合cpolar內網穿透…

C語言系列(所需基礎:大學C語言及格)-4-轉義字符/注釋/選擇語句

文章目錄 一、轉義字符二、注釋三、選擇語句 一、轉義字符 加上\會講原來的字符改變意思,即進行轉義 例如\t會使t變成\t用于表示轉義字符,使得t轉義成水平制表符 其他轉義字符: 三字母詞(展示\?的用處)…

C#面:接口是一種引用類型,不可以聲明公有的域或私有的成員變量,但是可以聲明什么呢?

可以聲明:方法,屬性,索引器,事件。 接口的主要作用是定義一套規范,使得不同的類可以按照相同的規范進行交互。通過實現接口,類可以具備多態性,即可以以接口類型來引用對象,并調用接…

k8s-001-Centos7內核升級

1. 查看內核 [rootlocalhost ~]# uname -a 2. 執行的命令(安裝最新版內核): 下載: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 安裝: rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm ( 查看最新版內核&…

杭州默安-安全技術實習生-一面

1.自我介紹 略 2.專業主修的課程 略 3.xss漏洞的類型,原理及防御 原理,服務器對用戶的輸入過濾不嚴格,將用戶的輸入當作Javascript代碼執行并返回給客戶端。 防御,輸入和url參數過濾,HTML實體編碼轉義特殊字符。…

力扣hot100題解(python版33-35題)

33、排序鏈表 給你鏈表的頭結點 head ,請將其按 升序 排列并返回 排序后的鏈表 。 示例 1: 輸入:head [4,2,1,3] 輸出:[1,2,3,4]示例 2: 輸入:head [-1,5,3,4,0] 輸出:[-1,0,3,4,5]示例 3&a…

kafka架構詳解

文章目錄 概述kafaka架構Kafka的設計時什么樣的Zookeeper 在 Kafka 中的作用知道 概述 Apache Kafka 是分布式發布 - 訂閱消息系統,在 kafka 官網上對 kafka 的定義:一個分布式發布 - 訂閱消息傳遞系統。 Kafka 最初由 LinkedIn 公司開發,Li…

mysql 中 auto_increment 自增約束的用法和配置

自增約束 int字段 特殊約束條件,用于為表中寫入新的記錄生成唯一的值,一個表中只能有一個自增約束字段 格式 字段 數據類型 auto_increment 創建帶有自增約束的表 create table student_game_auto ( id int unique auto_increment, name char(5),…

螞蟻集團推動編制的全球首個隱私計算一體機國際標準發布

近日,IEEE 標準協會(IEEE-SA)正式發布并推行了由我國企業主導的全球首個隱私計算一體機國際標準《隱私計算一體機技術要求》(IEEE 3156-2023)。IEEE-SA是權威國際標準制定機構,該標準的成功發布意味著中國的…

numpy常見操作

返回各維度元組print(img.shape)返回大小img.size返回各維度數據類型print(img.dtype) 數據類型變int8maskmask.astype(np.int8) 注意int32可變float64 但float64變int32會把小數截斷 string_可變float64 NumPy常見操作: import numpy as np 創建一個一維數組 ar…

繼承-學習2

this關鍵字:指向調用該方法的對象,一般我們是在當前類中使用this關鍵字,所以我們常說代表本類對象的引用 super關鍵字:代表父類存儲空間的標識(可看作父類對象的引用) 父類: package ven;public class Fu {//父類成員…

操作系統面經

1. 進程和線程的區別? 調度:進程是資源管理的基本單位,線程是程序執行的基本單位。切換:線程上下文切換比進程上下文切換要快得多。擁有資源: 進程是擁有資源的一個獨立單位,線程不擁有系統資源&#xff0…

unity自定義著色器基礎

這些內置渲染管線的著色器示例演示了編寫自定義著色器的基礎知識,并涵蓋了常見的用例。 有關編寫著色器的信息,請參閱編寫著色器。 設置場景 第一步是創建一些用于測試著色器的對象。在主菜單中選擇 Game Object > 3D Object > Capsule。然后&a…

高光譜遙感學習入門丨高光譜數據處理基礎、Python和Matlab高光譜遙感數據處理

目錄 ①Python高光譜遙感數據處理與高光譜遙感機器學習方法深度應用 ②Matlab高光譜遙感、數據處理與混合像元分解實踐技術應用 ③高光譜遙感數值建模技術及在植被、水體、土壤信息提取領域應用 更多應用 高光譜遙感信息對于我們認識世界具有重要意義。盡管大部分物質在人眼…

記錄 | docker權限原因導致service ssh start失敗

【報錯】 容器內啟 ssh server 報錯 有兩個錯: (1)/etc/ssh/sshd_host_rsa_key 權限太高; (2)/run/sshd用戶組不為 root 解決方法: 方法一: 各自容器內對/etc/ssh/sshd_host_r…

【前端素材】推薦優質后臺管理系統 Adminity平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理網站、應用程序或系統的管理界面,通常由管理員和工作人員使用。它提供了訪問和控制網站或應用程序后臺功能的工具和界面,使其能夠管理用戶、內容、數據和其他各種功能。 2、功能需求 后臺管理系…