系列
事務(wù)消息介紹
rocketMq在4.x版本里面的事務(wù)消息功能似乎不是完整的棱诱,在閱讀的源碼過程中發(fā)現(xiàn)只有其實(shí)宏觀上看可以區(qū)分為兩個(gè)階段
階段一:prepare階段,該階段主要發(fā)一個(gè)消息到rocketMq特纤,但是該消息只存儲(chǔ)在commitLog當(dāng)中军俊,在consumeQueue中不可見。
階段二:commit/rollback階段捧存,該階段主要是在commit階段重新生成一個(gè)message(prepare階段消息的克隆)粪躬,保存到commitLog當(dāng)中,同時(shí)會(huì)將該消息保存至consumeQueue當(dāng)中昔穴。
事務(wù)消息舉例
說明:
? ? 1镰官、先發(fā)送prepared消息,也就是步驟1中的發(fā)送轉(zhuǎn)賬消息
? ? 2吗货、執(zhí)行本地操作泳唠,也就是步驟4中的本地事務(wù)
? ? 3、發(fā)送commit消息宙搬,也就是步驟中5中的發(fā)送確認(rèn)消息
rocketMq的交互流程
說明:
? ? 1笨腥、參考阿里云的消息隊(duì)列截圖
事務(wù)消息的producer
說明:
? ? 1、分布式事務(wù)producer多了兩個(gè)東西勇垛,本地事務(wù)執(zhí)行函數(shù)脖母,提供給遠(yuǎn)程回調(diào)的回調(diào)函數(shù)(基本沒用)。
事務(wù)消息的prepare階段
說明:參見DefaultMQProducerImpl類
說明:參見DefaultMessageStore類
? ? 1闲孤、prepare消息不回拷貝至consumeQueue谆级,也就是消息不可見。
事務(wù)消息的commit階段
說明:參見EndTransactionProcessor類讼积。
? ? 1肥照、EndTransactionProcessor是事務(wù)消息commit的入口
說明:參見DefaultMessageStore類
? ? 1、rocketMq在消費(fèi)commit的事務(wù)消息的時(shí)候會(huì)放置到consumeQueu當(dāng)中
? ? 2勤众、放置到consumeQueue以后就可以被消費(fèi)了