1. 程式人生 > >rocketmq介紹和訊息佇列事務處理機制

rocketmq介紹和訊息佇列事務處理機制

RocketMQ介紹
rocketmq是支援釋出(Pub)和訂閱(Sub),可靠的先進先出、嚴格順序、億級訊息堆積能力的分散式訊息佇列
rocketmq訊息佇列包含Producer、Name Server、Broker、Consumer等四大塊組成
Producer:也就是常說的生產者,生產者的作用就是將訊息傳送到 MQ,生產者本身既可以產生訊息,如讀取文字資訊,將讀取的文字資訊傳送到 MQ
Name Server:提供輕量級的服務發現和路由資訊,每個 NameServer 記錄完整的路由資訊,提供等效的讀寫服務,並支援快速儲存擴充套件
Broker:是 RocketMQ 系統的主要角色,就是前面一直說的 MQ。Broker 接收來自生產者的訊息,儲存以及為消費者拉取訊息的請求做好準備
Consumer:也就是常說的消費者,接收 MQ 訊息的應用程式就是一個消費者。擁有相同 Consumer Group 的消費者稱為一個消費者叢集
生產者走向: Producer--->Name Server--->Broker

消費者走向: Customer--->Name Server--->Broker


以下是其他相關支援元件
Topic:主題是對訊息的邏輯分類,比如說有訂單類相關的訊息,也有支付類相關的訊息,那麼就需要進行分類。
Tag:標籤可以被認為是對主題的進一步細化,可以理解為二級分類,一般在相同業務模組中通過引入標籤來標記不同用途,同時消費者也可以根據不同的標籤進行訊息的過濾。
如下所示:
Message msg = new Message("TopicTest",// topic
                            "TagA",                     // tag
                            "ORDER",                    // key
                            ("Hello").getBytes()); // body

SendResult sendResult = producer.send(msg);

部署Broker
部署方式包含單Master、多Master、多Master多Slave(叢集採用非同步複製方式)、多Master多Slave(叢集採用同步雙寫方式)等四大類組成
單Master: 優點:除了配置簡單沒什麼優點
          缺點:不可靠,該機器重啟或宕機,將導致整個服務不可用
多Master:優點:配置簡單,效能最高
缺點:可能會有少量訊息丟失(配置相關),單臺機器重啟或宕機期間,該機器下未被消費的訊息在機器恢復前不可訂閱,影響訊息實時性
多Master多Slave(叢集採用非同步複製方式):   
優點:效能同多Master幾乎一樣,實時性高,主備間切換對應用透明,不需人工干預
        缺點:Master宕機或磁碟損壞時會有少量訊息丟失
多Master多Slave(叢集採用同步雙寫方式):
       優點:服務可用性與資料可用性非常高
       缺點:效能比非同步叢集略低,當前版本主宕備不能自動切換為主

訊息佇列分散式事務

一般用法比較廣泛的訊息佇列有rabbitMQ、rocketMQ、kafka等訊息中介軟體,但是rabbitMQ和kafka這兩個訊息中介軟體沒有事務,接下來我們以rocketMQ舉例子,

我們以一個轉帳的場景為例來說明這個問題:Bob向Smith轉賬100塊。

在開發中我們將大事務拆分成=小事務+非同步


事務流程:

第一步:首先生產者傳送Prepared訊息給MQ,狀態為不可消費狀態(就是消費者無法訊息)   ---該訊息包含Smith姓名以及轉賬金額和狀態等等

第二步:執行本地事務   ---該事務就是從Bob賬戶扣款100塊

第三部:如果本地事務執行失敗就回滾,並將Prepared訊息刪除,如果本地事務執行成功,確認訊息傳送(就是修改Prepared訊息狀態為可消費狀態)

第四步:消費端開始消費佇列。如果成功,給MQ返回回執。表示成功,生產者可以訂閱該訊息或者監聽該訊息,表示整個訊息佇列是成功的  --比如:支付包賬戶餘額轉到銀行卡。到賬狀態和時間都是靠生產者監聽和訂閱MQ實現轉賬成功的邏輯。

如果訊息端出現消費失敗(這裡有好多原因:程式報錯,賬戶被凍結了等等),那麼MQ可以重發訊息。可以設定6次,超過次數可人工處理。

相關推薦

rocketmq介紹訊息佇列事務處理機制

RocketMQ介紹 rocketmq是支援釋出(Pub)和訂閱(Sub),可靠的先進先出、嚴格順序、億級訊息堆積能力的分散式訊息佇列 rocketmq訊息佇列包含Producer、Name Serv

Hibernate的事務處理機制flush方法的用法

注:轉自http://www.cnblogs.com/wangkai1990/p/5704529.html。 首先來看下,session的生命週期 Hibernate中java物件的三種狀態: 1、臨時狀態(transient):用new語句建立,還沒有被持久化,不處於Se

Windows訊息機制之二(續)-- windows訊息訊息佇列

與基於MS - DOS的應用程式不同,Windows的應用程式是事件(訊息)驅動的。它們不會顯式地呼叫函式(如C執行時庫呼叫)來獲取輸入,而是等待windows向它們傳遞輸入。 windows系統把應用程式的輸入事件傳遞給各個視窗,每個視窗有一個函式,稱為視窗訊息處理函式。

RocketMQ中介軟體訊息佇列在Maven專案中的配置使用操作 (分散式釋出訂閱訊息系統)

一、專案引用 <dependency>     <groupId>com.foriseland.fjf.mq</groupId>     <artifactI

滴滴出行基於RocketMQ構建企業級訊息佇列服務的實踐

本文整理自滴滴出行訊息佇列負責人 江海挺 在Apache RocketMQ開發者沙龍北京站的分享。通過本文,您將瞭解到滴滴出行: 在訊息佇列技術選型方面的思考; 為什麼選擇 RocketMQ 作為出行業務的訊息佇列解決方案; 如何構建自己的訊息佇列服務; 在 RocketMQ

Rabbitmq交換器Exchange訊息佇列

通常我們談到佇列服務, 會有三個概念: 發訊息者、佇列、收訊息者,RabbitMQ 在這個基本概念之上, 多做了一層抽象, 在發訊息者和 佇列之間, 加入了交換器 (Exchange). 這樣發訊息者和佇列就沒有直接聯絡, 轉而變成發訊息者把訊息給交換器, 交換器根據排程策略再把訊息再給佇列。 交換器的功能

activeMQ的訂閱者訊息佇列的應用

1.PTP模型 PTP(Point-to-Point)模型是基於佇列(Queue)的,對於PTP訊息模型而言,它的訊息目的是一個訊息佇列(Queue),訊息生產者每次傳送訊息總是把訊息送入訊息佇列中,訊息消費者總是從訊息佇列中讀取訊息.先進佇列的訊息將先被訊息消費者讀取. 傳送方發訊息到佇列

Jdbc Url 設定allowMultiQueries為truefalse時底層處理機制研究

一個mysql jdbc待解之謎 關於jdbc  url引數 allowMultiQueries 如下的一個普通JDBC示例: String user ="root"; String password = "root"; String 

redis訊息佇列處理邏輯

redis 作佇列使用時,假設需要完成以下邏輯: 1.一端入,令一端出。 2.每一次讀取佇列內容長度10。 3. 讀取完之後從移除讀取過的內容。 先說結論: 官方客戶端命令的順序應該是: 1.rpush

springboot整合rabbitmq,根據查詢的資訊建立多個訊息中心訊息佇列,並實現不同的訊息傳送到不同的訊息中心

      今天接到一個需求,就是在傳送訊息到rabbitmq訊息中心的時候,需要根據裝置型別,將訊息傳送到不同的訊息佇列,因此要建立不同的訊息佇列。       修改之前是把配置資訊寫在配置文中,專案啟動時,獲取配置檔案中的配置資訊,建立訊息佇列。       修改後的邏輯

常用訊息佇列對比、選擇參考訊息佇列認知

目錄: 1、訊息佇列之常用協議 1.1、AMQP 1.2、MQTT協議 1.3、STOMP協議 1.4、XMPP協議 2、訊息佇列之模型 3、訊息佇列的組成模組 4、常用訊息佇列介紹 4.1、RabbitMQ 4.2、ActiveMQ 4.3、Rocket

詳解RPC遠端呼叫訊息佇列MQ的區別

PC(Remote Procedure Call)遠端過程呼叫,主要解決遠端通訊間的問題,不需要了解底層網路的通訊機制。   RPC框架   知名度較高的有Thrift(FB的)、dubbo(阿里的)。   RPC的一般需要經歷4個步驟: 1、建立通訊 首先要

分散式、中介軟體訊息佇列到底是怎麼的一種工作模式?

本文轉自:悟空問答 分散式 相對於以前單一系統,所有的功能,服務都部署在一臺伺服器上,一掛全掛!分散式採用了把系統提供的服務分佈在不同的伺服器上的策略,這樣的架構就叫做分散式架構! 我有一個系統A,提供一個很簡單的介面,根據員工編號查詢員工姓名和他的考

多程序程式設計之程序間通訊-管道訊息佇列

1.程序間通訊 Linux作為一種新興的作業系統,幾乎支援所有的Unix下常用的程序間通訊方法:管道、訊息佇列、共享記憶體、訊號量、套介面等等。 2.管道 管道是程序間通訊中最古老的方式,它包括無名管道(或者匿名管道)和有名管道兩種,前者用於父程序和

hibernate的事務處理機制以及flush方法的作用

關於在使用hibernate在提交事務時常遇到的異常:        an assertion failure occured (this may indicate a bug in Hibernate, butis more likely due to unsafe us

Spring事務處理機制

常用的事務處理方式:   手動處理事務   註解式事務   AOP宣告事務資料庫訪問時,就不需要開啟Session、開啟事務,提交事務、關閉 Session。由AOP指定的事務管理器,在方法(資料庫訪

SpringBoot(八) Spring訊息佇列RabbitMQ

概述 1.大多數應用中,可以通過訊息服務中介軟體來提升系統非同步能力和拓展解耦能力。 2.訊息服務中的兩個重要概念:訊息代理(Message broker)和目的地(destination) 當訊息傳送者傳送訊息後,將由訊息代理接管,訊息代理保證訊息傳遞到指定目的地。 3.訊息佇列主要有兩種形式的目的

Spring多資料來源事務處理機制

最近有spring配置多資料來源,中間用了aop來完成動態的切換,發現一些地方不是很明白,在AbstractRoutingDataSource這個類中有determineCurrentLookupKey的方法,另外我在所有DAO層方法上添加了before的切面,按理說,如果

Linux:使用多執行緒程式設計訊息佇列,實現兩個程序之間的聊天

思路: 一個檔案:建立一個執行緒和主函式,或者建立兩個執行緒主函式呼叫(我用這種)。 建立兩個訊息佇列, 一共兩個檔案,兩個佇列,四個程序 a.c    一個程序寫(訊息型別為1)   ---->>佇列     一個程序讀(訊息型別為2) b.c   一

分散式系統常見的事務處理機制

為保障系統的可用性、可靠性以及效能,在分散式系統中,往往會設定資料冗餘,即對資料進行復制。舉例來說,當一個數據庫的副本被破環以後,那麼系統只需要轉換到其他資料副本就能繼續執行下去。另外一個例子,當訪問單一伺服器管理的資料的程序數不斷增加時,系統就需要對伺服器