首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

ActiveMQ Broker 叢集架構設計:從雙節點 HA 到多節點星型拓撲

     編輯:Java 綜合教學

演進歷程:為什麼不採用全互聯?

早期 2 節點 HA(Networks of Brokers)在壓力增長時擴展為多節點。若採用**全互聯**(每兩節點直連),消息路由路徑呈指數級增長:

  • 3 節點:P→B1→B2 或 P→B1→B3→B2
  • 4 節點:路徑更多,延遲抖動劇烈,性能極不穩定。

全互聯拓撲 4節點路由爆炸

優化方案:星型拓撲 + 雙 Hub 高可用

單 Hub 星型(有單點風險)

中心 Hub 與所有邊緣 Broker 直連,消息最多經 3 個 Broker,延遲穩定。但 Hub 掛掉全叢集癱瘓。

單Hub星型

雙 Hub 互備星型(生產推薦)

  • 兩 Hub 互連,各自連接所有邊緣 Broker(B1/B2/B3)。
  • 生產者連 Hub1/Hub2(failover:(tcp://hub1,tcp://hub2))。
  • 消費者連邊緣 Broker(failover:(tcp://b1,tcp://b2,tcp://b3))。
  • 消息最長路徑:Producer→Hub→Edge→Consumer(3 hop),擴展新 Edge 僅需改 Hub 配置,不影響路徑長度。

雙Hub星型

本地實戰配置範例(5 實例)

端口規劃

activemq1: 61616 (broker1)
activemq2: 61626 (broker2)
activemq3: 61636 (broker3)
activemq4: 61646 (broker-hub1)
activemq5: 61656 (broker-hub2)

邊緣 Broker 配置(以 broker1 為例)

<broker xmlns="https://activemq.apache.org/schema/core" brokerName="broker1">
    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>
    <transportConnectors>
        <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
    </transportConnectors>
</broker>

Hub1 配置(連接 Hub2 + 所有 Edge)

<broker brokerName="broker-hub1">
    <networkConnectors>
        <networkConnector uri="static:(tcp://127.0.0.1:61656,tcp://127.0.0.1:61616,tcp://127.0.0.1:61626,tcp://127.0.0.1:61636)" duplex="true"/>
    </networkConnectors>
    <persistenceAdapter><kahaDB directory="${activemq.data}/kahadb"/></persistenceAdapter>
    <transportConnectors>
        <transportConnector name="openwire" uri="tcp://0.0.0.0:61646?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
    </transportConnectors>
</broker>

Hub2 配置(連接所有 Edge,不連 Hub1 避免環路)

<networkConnector uri="static:(tcp://127.0.0.1:61616,tcp://127.0.0.1:61626,tcp://127.0.0.1:61636)" duplex="true"/>

客戶端 Spring 配置

生產者:

<property name="brokerURL" value="failover:(tcp://localhost:61646,tcp://localhost:61656)"/>

消費者:

<property name="brokerURL" value="failover:(tcp://localhost:61616,tcp://localhost:61626,tcp://localhost:61636)"/>

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved