在ActiveMQ中使用了单例模式来实现单个Broker实例。
具体来说:
ActiveMQ支持两种运行模式
- Embedded模式:ActiveMQ被嵌入在应用程序内部运行。
- Standalone模式:ActiveMQ作为独立进程运行。
Embedded模式
在Embedded模式下,ActiveMQ仅初始化一个Broker实例:
BrokerService broker = new BrokerService();
broker.setBrokerName("broker1");
broker.addConnector("tcp://localhost:61616");
broker.start();
这里只调用了一次new BrokerService()
来创建Broker。
Standalone模式
在Standalone模式下,作为独立进程运行时也只初始化一个Broker实例:
public class Broker {
public static void main(String[] args) {
BrokerService broker = new BrokerService();
// 配置broker
broker.start();
}
}
也只调用了一次new BrokerService()
。
单例模式实现
无论是Embedded模式还是Standalone模式,ActiveMQ都只需要一个Broker实例。
所以ActiveMQ使用了单例模式来实现Broker:
- 只初始化一个BrokerService实例
- 所有客户端只连接到这个单例Broker上
- 避免每次都创建一个Broker,提高性能。
以Embedded模式为例,多次获取BrokerService实例返回的是同一个实例:
BrokerService broker1 = new BrokerService();
BrokerService broker2 = new BrokerService();
broker1 == broker2; // true
这也就是为什么ActiveMQ的Broker实例称为单例Broker。