桥接方式可以参考官网:http://activemq.apache.org/networks-of-brokers.html
集群的方式参考官网:http://activemq.apache.org/masterslave.html
1.桥接(network of brokers)
-
配置说明
修改 activeMQ 服务器的 activeMQ.xml, 增加如下配置
<networkConnectors>
<networkConnectoruri="static://(tcp://192.168.11.153:61616,tcp://192.168.11.154:61616)"/>
</networkConnector
两个 Brokers 通过一个 static 的协议来进行网络连接。一个 Consumer 连接到BrokerB 的一个地址上,当 Producer 在 BrokerA 上以相同的地址发送消息是,此时消息会被转移到 BrokerB 上,也就是说 BrokerA 会转发消息到BrokerB 上
消息回流
从 5.6 版本开始,在 destinationPolicy 上新增了一个选项replayWhenNoConsumers 属性,这个属性可以用来解决当 broker1 上有需要转发的消息但是没有消费者时,把消息回流到它原始的 broker。同时把enableAudit 设置为 false,为了防止消息回流后被当作重复消息而不被分发
通过如下配置,在 activeMQ.xml 中。 分别在两台服务器都配置。即可完成消息回流处理
<policyEntry queue=">" enableAudit="false">
<networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactory
replayWhenNoConsumers="true"/>
</networkBridgeFilterFactory>
</policyEntry>
动态网络连接
ActiveMQ 使用 Multicast 协议将一个 Service 和其他的 Broker 的 Service 连接起来。Multicast 能够自动的发现其他 broker,从而替代了使用 static 功能列表 brokers。用 multicast 协议可以在网络中频繁
multicast://ipadaddress:port?transportOptions
2.基于 zookeeper+levelDB 的 HA 集群搭建
这里面还有的集群方式方式,这里不再秒速,可以参考官网:
http://activemq.apache.org/masterslave.html
activeMQ5.9 以后推出的基于 zookeeper 的 master/slave 主从实现。虽然ActiveMQ 不建议使用 LevelDB 作为存储,主要原因是,社区的主要精力都几种在 kahadb 的维护上,包括 bug 修复等。所以并没有对 LevelDB 做太多的关注,所以他在是不做为推荐商用。但实际上在很多公司,仍然采用了LevelDB+zookeeper 的高可用集群方案。而实际推荐的方案,仍然是基于KahaDB 的文件共享以及 Jdbc 的方式来实现。
- 配置
在三台机器上安装 activemq,通过三个实例组成集群。
- 修改配置
directory: 表示 LevelDB 所在的主工作目录
replicas: 集群中存在的节点数量。至少(副本/2)+1节点必须联机,以避免服务中断。
bind:当当前的节点为 master 时,它会根据绑定好的地址和端口来进行主从复制协议
zkAddress:zk 的地址
hostname:本机 IP
sync:在认为消息被消费完成前,同步信息所存储的策略。
<broker brokerName="broker" ... >
...
<persistenceAdapter>
<replicatedLevelDB
directory="activemq-data"
replicas="3"
bind="tcp://0.0.0.0:0"
zkAddress="zoo1.example.org:2181,zoo2.example.org:2181,zoo3.example.org:2181"
zkPassword="password"
zkPath="/activemq/leveldb-stores"
hostname="broker1.example.org"
/>
</persistenceAdapter>
...
</broker>
网友评论