ActiveMQ學習筆記02 多伺服器間的通訊

2021-06-22 16:17:35 字數 3256 閱讀 9384

activemq支援多伺服器(broker)之間的網路連線,也就是集群。通過集群多個activemq broker的例項,提供乙個對外的統一服務,用來提高activemq的可用性和擴充套件性。

伺服器之間的通訊,按照通訊方式可以分為兩種,

橋接**(bridge forwarding)

和雙向傳輸(duplex)。顧名思義,橋接**是將訊息傳遞給另外乙個activemq的broker,雙向傳輸是用乙個通道既可以收訊息,也可以發訊息。

按照發現broker的方式來區分,也可以分成另外兩種,靜態註冊和動態發現。如果你確切的知道每一台broker的位址和埠號,那麼可以使用靜態註冊的方式;如果你並不知道每一台broker的情況,比如,乙個可動態擴充套件的生產環境,那麼動態發現方式將非常合適。

每一種通訊方式,同樣是通過編輯%activemq_home%conf\activemq.xml檔案來完成配置。如下:

在networkconnectors的節點下可以配置多個networkconnector,每個networkconnector是一種broker-to-broker的通訊方式。下面具體介紹一下activemq支援的broker-to-broker的幾種協議。

靜態註冊:

伺服器端的static connector:被設定為static connector的兩個broker之間會**訊息,發給brokera的訊息,會**給brokerb。但不是實時**,而是在consumer訪問brokerb的時候再**。配置如下:

這樣,發給remotehost的訊息,會在consumer從localhost中取訊息的時候自動**過去。

static connector比較適合用在需要分散consumer連線的場景。比如:有乙個broker有很多consumer,而且每個consumer在不同的地區。如果每個consumer都連線同乙個broker,那麼這個broker將維護大量的連線,如果每個地區乙個broker,則每個地區的consumer只需要連線本地的broker。broker之間通過static自動**訊息,可以緩解單台broker連線過多的問題。

在實際測試的時候發現了《activemq in action》書中有一點沒寫清楚。只有queue才是consumer消費的時候**訊息。持久化topic是同步**訊息的,並且remotehost上面的訊息都會被標記為已消費。

客戶端的failover protocol:顧名思義,這個協議是失效轉移。客戶端會預設使用隨機演算法選擇事先配置好的幾個broker之一;也可以關閉隨機選擇。如果被選中的broker發生狀況,導致不能提供服務,客戶端會選擇另乙個可用的broker,如果某個broker不可用,activemq會無限制的重試。(每次連線重試的延遲時間可配置)

預設配置,使用隨機選擇broker演算法:

failover:(tcp://localhost:61616,tcp://remotehost:61616)
關閉隨機選擇,優先選擇第乙個配置的broker,只有之前的broker不可用,再選擇

後面broker:

failover:(tcp://localhost:61616,tcp://remotehost:61616)?randomize=false
由於自動重連機制,所以強烈推薦客戶端使用faliover,即使是只有乙個broker,也可以通過自動重連功能,在broker重新啟動之後重新建立連線,而不用手動重啟客戶端。這樣可以提公升程式的健壯性。

注意這個failover和static是不同的,static連線是用於伺服器端自動轉移訊息,客戶端並不知道伺服器端是怎麼轉移訊息的,也不知道到底伺服器是幾個,對客戶端是完全透明的。failover是客戶端失效轉移,客戶端連線伺服器的的url需要明確的指出,所以客戶端必須知道伺服器端的網路拓撲結構。

動態發現:

伺服器端的multicast connector:伺服器之間通過廣播功能自動發現其他伺服器。每個伺服器都會把自己的服務發布給224.0.0.0 - 239.255.255.255 ip位址段,也會從這個位址段找尋其他伺服器。這樣多個伺服器之間可以主動的相互發現。配置如下:

在networkconnectors節點中配置multicast協議,用於尋找其他支援multicast的伺服器。在transportconnector節點配置discoveryuri,宣告伺服器本身支援multicast協議。

廣播自動發現伺服器,適合於經常動態增減伺服器的情況。優點是增減伺服器,不需要為每個其他伺服器節點修改配置。缺點是服務自動發現,缺少配置檔案,對除錯有影響。另外需要注意的是,由於廣播功能,經常產生大量的訊息傳輸,所以很多情況下運維是關掉這個服務的。使用multicast connector前要確保這個服務是開啟的。

客戶端的discover protocol:和failover protocol差不多,只不過是動態發現服務。配置如下:

discovery:(multicast://default)
這樣客戶端會自動連線廣播的url在multicast://default的伺服器。

客戶端的fanout protocol:扇出協議,用於乙個客戶端同時向多個伺服器發同樣的訊息。

靜態查詢配置如下:

fanout:(static:(tcp://host1:61616,tcp://host2:61616,tcp://host3:61616))
當然也可以支援動態發現:

fanout:(multicast://default)
這個適用場景很少,畢竟客戶端直接控制發冗餘訊息給伺服器,實際上將變得更加不可控,不建議使用。

客戶端的peer protocol:對等協議,用於前嵌入式伺服器的連線,使用場景較少。

ActiveMQ學習筆記

關鍵介面和類 connectionfactory connectionfactory 連線工廠 connection connection 連線session session destination destination 目的 messageproducer messageproducer 訊息生...

pytest學習筆記 02 執行多檔案

實際使用中,根據業務場景劃分不同的測試檔案,可維護性會更強。如按照下面區分 item test.py 商品相關功能測試 order test.py 訂單相關功能測試 payment test.py 付款相關功能測試這樣主要有兩個好處 功能劃分後一目了然,不會全部測試函式都混在乙個檔案中 可以分開執行...

Docker學習筆記 安裝ActiveMQ

一 實驗環境 1 宿主機os win10 64位 2 虛擬機器os ubuntu18.04,虛擬機器名稱 ubuntu18vm1,虛擬機器ip 192.168.8.25 3 操作賬號 docker 4 在虛擬機器上已安裝docker 二 安裝 簡要步驟 1.搜尋映象 sudo docker sear...