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即使在单实例的情况下,也能提供较高的可用性。