ActiveMQ学习--集群配置Networks of Brokers

为了防止单台ActiveMQ的单点故障,通常使用多台做集群部署。ActiveMQ支持多种方式的集群部署,具体可参考文档:http://activemq.apache.org/clustering.html

这里介绍一种简单的集群配置方式(Networks of Brokers)

首先准备两个ActiveMQ实例:

实例1: 端口61616

实例2: 端口61626

服务端配置部分

修改实例1的配置文件activemq.xml,添加如下节点:

<networkConnectors>
    <networkConnector uri="static:(tcp://localhost:61626)" userName="myusername" password="mypassowrd"/>
</networkConnectors>

修改实例2的配置文件activemq.xml,同样添加类似节点:

<networkConnectors>
    <networkConnector uri="static:(tcp://localhost:61616)" userName="myusername" password="mypassowrd"/>
</networkConnectors>

其中 static:(tcp://localhost:61626) 表示连接到实例2,userName和password则是对应实例的用户密码,如果没有则可以不设置这两个属性。

修改完成后,分别启动两个实例,如果成功则会在activemq的日志中出现类似如下内容:

Network connection between vm://myactivemq2#16 and tcp://localhost/127.0.0.1:61616@60259 (myactivemq) has been established.

客户端配置部分

客户端连接时的brokerURL则是

failover:(tcp://localhost:61616,tcp://localhost:61626)

这样就可以实现当一个activemq实例出问题后,客户端自动切换到另一个。默认两个实例不分主次客户端会随机选择一个进行连接。

参考配置页面:http://activemq.apache.org/failover-transport-reference.html


使用Network of brokers的方式可以在一个实例上面发送消息,然后在另一个实例上面消费消息,消息可以在各实例间自动路由。相对启动两个单独的activemq实例避免了,生产者和消费者因为在不同实例而造成消息不会被消费的问题。

主备配置

如果只是想配置一个后备的实例,以便主实例出现故障时做故障转移,则可以配置如下:

failover:(tcp://local:61616,tcp://local:61626)?randomize=false&priorityBackup=true #默认第一个为主实例

其中:randomize=false则是设置不随机使用实例,从顺序第一个开始尝试连接,如果第一个连接失败则再连接第二个。priorityBackup=true则表示如果如果主实例恢复后自动再切换回去,这个操作不需要人工干预。priorityBackup只是在故障转移的功能上增加了一个持续尝试连接主实例的操作,当主实例连接成功时则开始切换操作。

另外:这种集群的方式经过测试发现如果实例1关闭,那么发送到实例1上面未被取出的队列消息会丢失,再重新启动实例1仍无法收到已丢失的消息,所以在业务层设计上就尽量快速消费消息,避免消息在队列中停留时间太长。


如果要想故障时信息不丢失则可以使用另一个方式做主从,参考文档: 

http://activemq.apache.org/masterslave.html


提交评论