AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

阿里二面:消息隊列的事務消息可以用 TCC 模式實現嗎?

來源: 責編: 時間:2023-10-24 08:59:58 307觀看
導讀大家好,我是君哥。消息隊列的主要功能是系統間解耦,實現流量的削峰填谷。主流的消息隊列一般有三個核心操作:消費者發送消息,Broker 保存消息,消費者消費消息。如下圖:圖片對于一個完整的事務消息,可以理解為生產者生產消息

大家好,我是君哥。zXu28資訊網——每日最新資訊28at.com

消息隊列的主要功能是系統間解耦,實現流量的削峰填谷。主流的消息隊列一般有三個核心操作:消費者發送消息,Broker 保存消息,消費者消費消息。如下圖:zXu28資訊網——每日最新資訊28at.com

圖片圖片zXu28資訊網——每日最新資訊28at.com

對于一個完整的事務消息,可以理解為生產者生產消息和消費者消費消息,這兩個操作要不全部成功要不全部失敗。但事實上,很難有消息隊列來實現生產消息和消費消息的事務特性。zXu28資訊網——每日最新資訊28at.com

1 事務消息實現

1.1 生產者事務

一些消息隊列在生產端實現事務消息,對生產的一批消息要不全部發送成功,要不全部發送失敗。zXu28資訊網——每日最新資訊28at.com

下圖是 RabbitMQ 的事務消息:zXu28資訊網——每日最新資訊28at.com

圖片圖片zXu28資訊網——每日最新資訊28at.com

RabbitMQ 的事務消息實現的就是生產者的事務消息,發送消息的時候,把 Channel 設置為事務模式,這樣這一批消息就會緩存在 Channel,等提交事務時才會提交到 Broker。可以參考下面代碼:zXu28資訊網——每日最新資訊28at.com

ConnectionFactory factory=new ConnectionFactory();cnotallow=factory.newConnection();Channel channel=connection.createChannel();//開啟事務channel.txSelect();channel.basicPublish("directTransactionExchange","transactionRoutingKey",null,message.getBytes("utf-8"));//提交事務 或者 channel.txRollback()回滾事務channel.txCommit();

Kafka 的事務消息類似,指定一個事務 id,集群中不同的生產者都可以使用這個事務 id 來實現事務消息。看下面代碼:zXu28資訊網——每日最新資訊28at.com

String transactionId = "xxxx123yyy"Properties properties = new Properties();properties.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, transactionId);KafkaProducer<String, String> producer = new KafkaProducer<String, String>(properties);//開啟事務消息producer.initTransactions();producer.beginTransaction();try {     //發送消息     String topic = "testTransactionId"     producer.send(new ProducerRecord<String, String>(topic, "msg1"));     producer.send(new ProducerRecord<String, String>(topic, "msg2"));     producer.send(new ProducerRecord<String, String>(topic, "msg3"));     // 提交事務     producer.commitTransaction();} catch (ProducerFencedException e) {     producer.abortTransaction();}producer.close();

使用同一個事務 id 后,集群中的多個生產者可以實現對不同 Topic、不同分區的原子性寫入。在提交事務之前,這些消息是不可見的,事務提交之后,這些消息才能變為可見。zXu28資訊網——每日最新資訊28at.com

1.2 生產者+本地事務

生產者加本地事務也是消息隊列事務消息的一種實現方式。這種事務是指本地事務和生產者生產消息是一個原子性操作,要不都成功,要不都失敗。如下圖所示:zXu28資訊網——每日最新資訊28at.com

圖片圖片zXu28資訊網——每日最新資訊28at.com

RocketMQ 的事務消息是首先發送 half 消息到 Broker,然后執行本地事務,最后執行 commit/rollback 操作。執行了 commit 操作后,消費者就可以拉取到這條消息了。如下圖:zXu28資訊網——每日最新資訊28at.com

圖片圖片zXu28資訊網——每日最新資訊28at.com

RocketMQ 的 half 消息是將消息投遞到 topic 為 RMQ_SYS_TRANS_HALF_TOPIC 中 queueId 等于 0 的隊列中,當 RocketMQ 發送 commit 消息后再把消息投遞到原始隊列,這樣消費者就可以拉取到這條消息了。zXu28資訊網——每日最新資訊28at.com

2 TCC 模式

從上面的講解可以看到,消息隊列的事務消息使用的是兩階段提交的方式。那跟 TCC 模式的兩階段提交有什么區別呢?這節我們來看一下 TCC 模式。zXu28資訊網——每日最新資訊28at.com

2.1 TCC 概述

TCC 模式將分布式事務分為 try 和 commit/rollback 兩個階段來執行,try 階段對每個分支事務進行預留資源,如果 try 階段所有節點都執行成功,則進入 commit 階段提交全局事務,只要有一個節點執行失敗則進入 rollback 階段回滾全局事務。zXu28資訊網——每日最新資訊28at.com

TCC 模式有三個角色,TM、RM 和 TC:zXu28資訊網——每日最新資訊28at.com

  • TC: 協調節點,保存分支事務元數據和狀態,對分支事務發送提交或回滾命令;
  • TM:管理全局事務,包括開啟全局事務,提交/回滾全局事務;
  • RM:管理分支事務,包括提交或回滾本地事務,向 TC 注冊分支事務并上報分支事務狀態。

以購物場景中保存訂單、扣減庫存、扣減金額的例子來講,try 階段如下圖:zXu28資訊網——每日最新資訊28at.com

圖片圖片zXu28資訊網——每日最新資訊28at.com

commit/rollback 階段如下圖:zXu28資訊網——每日最新資訊28at.com

圖片圖片zXu28資訊網——每日最新資訊28at.com

可以看到,TCC 模式的兩階段提交,第一階段是用來嘗試預留資源,第二階段來扣減資源或釋放資源。而消息隊列中生產消息、保存消息、消費消息是不需要預留資源的,這是完全不同的業務場景。zXu28資訊網——每日最新資訊28at.com

3 總結

本文主要講述了消息隊列中的事務消息跟分布式事務中兩階段提交的 TCC 模式在實現方式上的區別。TCC 模式中兩階段提交的目的主要是用來確定資源是否可用,而消息隊列的事務消息是不需要考慮資源的,二者是不同的業務場景。zXu28資訊網——每日最新資訊28at.com


zXu28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-14709-0.html阿里二面:消息隊列的事務消息可以用 TCC 模式實現嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: IntelliJ IDEA 2023.2正式發布,新UI和Profiler轉正

下一篇: Redis中萬金油的String,為什么不好用了?

標簽:
  • 熱門焦點
  • 掘力計劃第 20 期:Flutter 混合開發的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發實戰詳解》作者,掘金優秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發的混亂之治。Flutter 基于自研的 Skia 引擎
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業務中需要進行各種審批流程時,可能會面臨一系列技術和業務上的挑戰。手動處理這些審批流程可能會導致開發成本的增加以及業務復雜度的上升。在這
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業發布的ESG報告。ESG是&ldquo;環境保
  • 阿里大調整

    來源:產品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • 華為HarmonyOS 4.0將于8月4日發布 或搭載AI大模型技術

    華為宣布HarmonyOS4.0將于8月4日正式發布。此前,華為已經針對開發者公布了HarmonyOS4.0,以便于開發者提前進行適配,也因此被曝光出了一些新系統的特性
  • 支持aptX Lossless無損傳輸 iQOO TWS 1賽道版發布限時優惠價369元

    2023年7月4日,“無損音質,聲動人心”iQOO TWS 1正式發布,支持aptX Lossless無損傳輸,限時優惠價369元。iQOO TWS 1耳機率先支持端到端aptX Lossless無
  • 2299元起!iQOO Pad明晚首銷:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其最大的賣點
  • 榮耀Magicbook V 14 2021曙光藍版本正式開售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍版本正式開售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤鍵程、
Top