Broker(代理人/中間人) 是 ActiveMQ 消息中轉的核心節點。生產者發送消息給 Broker,Broker 持久化後確認;消費者從 Broker 拉取消息,消費確認後 Broker 標記刪除。Broker 解耦了生產/消費雙方的拓撲與時間依賴。
[Producer] --> [Broker Master] <--同步--> [Broker Slave1] [Broker Slave2]
^ ^
| ZooKeeper 集群 (3+ 節點) |
+---------------------------+
[Consumer] 連接 Master,Master 掛掉 ZK 選舉新 Master
通過 networkConnector 將多個 Broker 組成網狀拓撲,消息在 Broker 間自動轉發,實現「多活」:所有 Broker 同時對外服務,無主從切換延遲。
Broker A (activemq-1, 端口 61616)
<broker xmlns="https://activemq.apache.org/schema/core" brokerName="activemq-1">
<networkConnectors>
<networkConnector uri="static:(tcp://127.0.0.1:61626)"/>
</networkConnectors>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
</broker>
Broker B (activemq-2, 端口 61626)
<broker xmlns="https://activemq.apache.org/schema/core" brokerName="activemq-2">
<networkConnectors>
<networkConnector uri="static:(tcp://127.0.0.1:61616)"/>
</networkConnectors>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61626?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
</broker>
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="failover:(tcp://localhost:61616,tcp://localhost:61626)"/>
</bean>
</property>
</bean>
| 參數 | 建議值 | 說明 |
|---|---|---|
networkConnector.uri | static:(tcp://host:port) | 靜態指定對端 Broker,生產建議使用 DNS/負載均衡器 |
duplex | true | 雙向橋接,消息雙向流動(默認 false 單向) |
conduitSubscriptions | true | 合併訂閱,避免重複消費 |
decreaseNetworkConsumerPriority | true | 遠端消費者優先級較低,優先本地消費 |
networkTTL 控制消息跳數。messageGroup 保證同組消息順序消費。QueueSize、EnqueueRate、DequeueRate、MemoryPercentUsage。failoverTransport 參數 maxReconnectAttempts、initialReconnectDelay,避免腦裂。| 維度 | ZooKeeper Master/Slave | Networks of Brokers |
|---|---|---|
| 最小節點數 | 6 (3 ZK + 3 Broker) | 2 |
| 服務模式 | 單活 | 多活 |
| 故障切換時間 | 秒級 (ZK 選舉) | 毫秒級 (客戶端 failover) |
| 吞吐性能 | 基線 10% | 接近單節點 N 倍 |
| 運維複雜度 | 高 | 低 |
| 適用場景 | 強一致性要求極高、團隊熟悉 ZK 運維 | 高吞吐、高可用、追求架構簡潔的多數業務 |