ActiveMQ中单例模式:ActiveMQ实现了单例Broker实例

在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。