比如某系統有三個子系統,登入系統、積分系統群、日誌系統群。
乙個使用者登入了系統,將傳送通知給積分系統集群和日誌系統集群,要求積分系統集群和日誌系統集群都能接收到完整的登入實現通知,類似於主題模式,同時在其中任乙個系統群中不能讓乙個訊息被集群中的多個系統重複處理,這類似於佇列模式。
子業務系統都有集群的可能性
同乙個訊息會廣播給關注該類訊息的所有子業務系統
同一類訊息在集群中被負載消費
業務的發生和訊息的發布最終一致性
不同業務系統分別處理同一訊息,同一業務系統負載處理同類訊息
解決訊息傳送時的一致性問題
解決訊息處理時的冪等性問題
基於訊息機制建立事件匯流排
將訊息發布到乙個主題中,主題名以virtualtopic開頭,如virtualtopic.test
從佇列中獲取資訊,在佇列名中表明自己身份,如consumer.a.virtualtopic.test,通過這種方式把主題中的訊息自動中轉到佇列中,由佇列負載處理
此流程類似於下圖:
記憶體日誌可持久化到本地檔案,同時支援集群複製,若當前業務子系統掛掉也能保證訊息不丟失
所謂冪等,簡單地說,就是對介面的多次呼叫所產生的結果和呼叫一次是一致的。擴充套件一下,這裡的介面,可以理解為對外發布的http介面或者thrift介面,也可以是接收訊息的內部介面,甚至是乙個內部方法或操作。
那麼我們為什麼需要介面具有冪等性呢?設想一下以下情形:
在接收訊息的時候,訊息推送重複。如果處理訊息的介面無法保證冪等,那麼重複消費訊息產生的影響可能會非常大。
消費者在接收訊息後,去記憶體日誌中查詢該訊息是否被處理過,若沒有,則呼叫業務進行處理,處理成功後更新記憶體日誌,確認訊息。
系統之間的訊息發布類似於事件,傳送者就是事件的發起人,消費者就是事件的影響人,這樣的架構方式稱為事件驅動。
什麼是事件驅動架構?
事件驅動架構(eda)定義了乙個設計和實現乙個應用系統的方法學,在這個系統裡事件可傳輸於鬆散耦合的元件和服務之間。簡單來說一句話"有事我叫你,沒事別煩我"
首先有三個業務系統,使用乙個事件匯流排簡化業務系統之間的事件發布,業務系統b、c通過事件匯流排提供的方法進行事件註冊,業務發起系統a使用事件匯流排提供的方法發起事件,這樣事件匯流排就封裝了訊息的傳送和接收以及記憶體日誌的處理,但這樣事件匯流排還不具備訊息中介軟體的功能,所以事件匯流排還需定義乙個抽象的訊息提供者,再根據不同的訊息中介軟體提供具體的訊息提供者,比如"activemq等"
訊息中介軟體系列一 訊息中介軟體的基本了解
前言 這是中介軟體乙個系列的文章之一,有需要的朋友可以看看這個系列的其他文章 訊息中介軟體系列 一 訊息中介軟體的基本了解 訊息中介軟體系列二 windows下的activemq和rabbitmq的安裝 訊息中介軟體系列三 jms和activemq的簡單使用 訊息中介軟體系列 四 認識amqp和ra...
訊息中介軟體的學習
使用者名稱密碼預設為admin 第二種以服務啟動 installservice.bat以管理員身份執行 服務中有activemq linux 解壓壓縮包 進入bin 輸入 activemq start,啟動完成 系統環境變數配置 變數名 rocketmq home 變數值 mq解壓路徑 mq資料夾名...
訊息中介軟體在專案中的作用
乙個使用者登入了系統,將傳送通知給積分系統集群和日誌系統集群,要求積分系統集群和日誌系統集群都能接收到完整的登入實現通知,類似於主題模式,同時在其中任乙個系統群中不能讓乙個訊息被集群中的多個系統重複處理,這類似於佇列模式。子業務系統都有集群的可能性 同乙個訊息會廣播給關注該類訊息的所有子業務系統 同...