ActiveMQ 中的 Broker 是什么?有哪些类型?它们的区别是什么?

ActiveMQ 中的 Broker 是一个消息代理,负责接收、路由和发送消息。
ActiveMQ 中主要有 3 种 Broker:

  1. Standalone Broker: 单一的 broker 实例,用于开发或小规模应用。
  2. Master Slave Broker: 主备 broker 实例,通过数据同步实现高可用。
  3. Network of Brokers: Broker 网络,多个 broker 通过网络连接,共同组成一个消息服务器,扩展性强。

这 3 种 Broker 的主要区别在于:

  1. 性能:Network of Brokers 性能最高,Standalone Broker 性能最低。
  2. 高可用:Master Slave Broker 配置高可用,其他类型无法保证高可用。
  3. 扩展性:Network of Brokers 扩展性最强,Standalone Broker 扩展性最差。
  4. 复杂度:Network of Brokers 配置最复杂,Standalone Broker 最简单。

例如:
Standalone Broker 配置:

<broker>
    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>
</broker>

Master Slave Broker 配置:

<broker>
   <haPolicy>
       <sharedStore/>    
   </haPolicy>
   <broker>
       <masterBroker>
           <uri>failover://tcp://masterhost:61616</uri>
       </masterBroker>
       <slaveBroker>      
           <uri>failover://tcp://slavehost:61616</uri>
       </slaveBroker> 
   </broker>
</broker>     

Network of Brokers 配置:
Master Broker(master.xml):

<networkConnectors>       
    <networkConnector uri="static:(tcp://localhost:61617)"  duplex="true"/> 
</networkConnectors>

Slave Broker(slave.xml):

<networkConnectors>      
    <networkConnector uri="static:(tcp://localhost:61616)"  duplex="true"/>
</networkConnectors>    

然后启动两个 broker:

activemq console xbean:file:master.xml
activemq console xbean:file:slave.xml 

所以,根据不同的应用场景选择不同类型的 Broker:

开发测试阶段 -> Standalone Broker
生产环境下 -> Master Slave Broker
大规模集群部署 -> Network of Brokers

需要权衡性能、高可用、扩展性等因素进行选择。