ActiveMQ的单机环境下如何保障高可用?

ActiveMQ单机环境下主要通过设置消息持久化,设置MasterSlave复制和设置优雅关闭,来保障高可用。主要有以下几方面:

1. 消息持久化

将消息持久化到磁盘,保证消息不会丢失。
可通过<policyEntry>配置消息过期和持久化策略:

<policyEntry queue=">" topic=">" >
   <pendingQueuePolicy>
      <fileQueuePendingMessageLimitStrategy>
         <timeToLive>120000</timeToLive>  
      </fileQueuePendingMessageLimitStrategy>   
   </pendingQueuePolicy>  
   ....
</policyEntry>

lossDestination 设置丢失消息的路由。

2. MasterSlave 复制

即使Master宕机,Slave也可以提供服务。
需要在Slave Broker配置:

<master>
   <networkConnectors>
         <connector name="ssl" uri="ssl://masterbroker:61617"/>   
   </networkConnectors> 
</master>

3. 优雅关闭

设置shutdownHook关闭Broker,保证消息不丢失。

<shutdownHooks>
   <bean xmlns="..." class="org.apache.activemq.hooks.SpringContextHook" />
</shutdownHooks>

4. 自动恢复

Broker可以自动恢复最近一次成功的持久化点。

<automatically Retry="{true/false}"/>

可以在单机ActiveMQ中,通过上述配置保障高可用:

  • 消息持久化到disk
  • MasterSlave 复制用于容灾
  • 优雅关闭不丢失消息
  • 自动恢复最新的数据状态

以上几点配合使用, ActiveMQ即使在单实例的情况下,也能提供较高的可用性。