ActiveMQ原始碼解析(一):聊聊broker
阿新 • • 發佈:2019-01-03
一、Broker
訊息佇列核心,相當於一個控制中心,負責路由訊息、儲存訂閱和連線、訊息確認和控制事務
1.Broker介面
定義了一些獲取broker本身相關資訊,新增connection、destination、session、訊息生產者、控制事務的介面
1.1 CompositeDestinationBroker
多目的地Broker,Producer可以通過它將生產的訊息傳給多個destination
1.2 EmptyBroker
空broker
1.3 ErrorBroker
呼叫的它的方法會丟擲BrokerStoppedException
1.4 TransactionBroker
為broker的每個方法提供分散式事務XA支援
2、BrokerFactory(抽象工廠模式)
public static BrokerService createBroker(URI brokerURI, boolean startBroker) throws Exception {
if (brokerURI.getScheme() == null) {
throw new IllegalArgumentException("Invalid broker URI, no scheme specified: " + brokerURI);
}
//根據url建立工廠例項
BrokerFactoryHandler handler = createBrokerFactoryHandler(brokerURI.getScheme());
//利用工廠handler建立broker(產品)
BrokerService broker = handler.createBroker(brokerURI);
if (startBroker) {
broker.start();
}
return broker;
}
3、BrokerContext
上下文環境,參考spring的ApplicationContext
4、BrokerContextAware
獲取上下文環境介面
5、BrokerFilter
Broker的子類,使用者可以在broker的操作前後加入一些自己的邏輯以實現像安全這樣的邏輯
6、BrokerPlugin和BrokerPluginSupport
BrokerPlugin只有一個方法:
BrokerPluginSupport繼承自MutableBrokerFilter並實現BrokerPlugin,實現機制跟BrokerFilter類似。
7、BrokerRegistry
很明顯,這裡有一個單例模式,一個互斥訊號量mutex和一個儲存所有BrokerService的map brokers。它是一個註冊中心,負責維護所有BrokerSerevice,完成獲取、繫結和解綁等操作。
8、BrokerService和BrokerServiceAware
後者是獲取BrokerService的介面,前者是一個核心的類,它有自己的宣告週期,連線了Connector,Broker,Region等元件,包括建立、註冊和移除相關的元件。
8.1、SslBrokerService
在建立連線時提供ssl安全連結
9、TransportConnector
提供通訊服務
10、ProductorBrokerExchange和ConsumerBrokerExchange
對Broker和Producer、Broker和Consumer之間的流進行控制,並跟蹤記錄資訊
總結
1、ActiveMQ的特性基本上都是通過BrokerFilter模式加上去的