前提
都是通过 networkConnectors 这个节点来配置的,安装就不说了,请自行百度一下....
配的是虚拟集群,如果有多台机器,其实就不需要修改端口了,可以省去不看
第一种方案
有两台activemq 来集群
一台端口为 8161 ,服务端口为 61616
一台端口为 8262 ,服务端口为 62626
修改这8161 端口请到 /conf/jetty.xml 中修改,搜索一下8161 改为 8162 就行
修改61616 端口请到 /conf/activemq.xml 中修改,搜索一下61616 改为 61626
同时记得把下面标红的去掉,如果没有,则忽略即可,因为端口太多了,这个应该是其他方式来连接
然后在任意一台的 /conf/activemq.xml 的 broker 节点中加入一个子节点
duplex 双工的意思
加完启动即可,是不是很简单呢
第二种方案
是建立在第一种方案上面的,因为activemq集群的消息并不会相互存储
那么问题就很明显了,如果有多台机进行集群,那经过的路径就会越来越复杂,这是肯定的,所以出现了另一种方案
再加一个节点来代理这两台
端口为 8263 ,服务端口为 62636
配置就完全不一样了
原来61和62那两台就不需要加networkConnectors 节点了,把这个节点加在63上,而且也跟原来不一样,需要代理另外两台,如下
然后另外两台只需要保证broker 节点的 brokerName 不同即可
不过这样配置完又会出现一个问题,就是 63这台又会出现一个单点故障的问题,所以再加一台来解决这个问题
端口为 8264 ,服务端口为 62646
只需要再配置这台的文件为
加入了對上面那台的集群,这样就可以解决这个问题了,这样改进后集群变为下面这样的
然后在说一下activemq的数据存储方式,默认方式在
/conf/activemq.xml中的
默认为这个方式,改为mysql的方式来存取的方式
记得要在 activemq的lib上加入数据库的驱动包!!!!
首先在这个文件中加入一个bean,
然后把
createTablesOnStartup="false" useDatabaseLock="true"/> 这两个属性记得加上,注意第一次
createTablesOnStartup 为true,等数据库生成对应的表后就改为false,不用每次都去创建这个表,不要删除就行了
除非你们数据库经常删表。。。
本文参考的文章有如下几篇
http://www.cnblogs.com/yjmyzz/p/activemq-ha-using-networks-of-brokers.html
https://www.cnblogs.com/leihenqianshang/articles/5623858.html
https://blog.csdn.net/jiangxuchen/article/details/8004612
说一下我自己整合遇到的一个问题,就是可能会出现这么一个情况
假设有2台机器,61和62
当我把数据发送给 61时,此时61突然 挂了,消费者还来不及消费,虽然可以自动切换到62上,
但是在61上面的数据就消费不到了,因为集群并不会把消费做一个广播,62上面并没有这条消息
只有当61重启的时候才会被消费,这个问题我也是找了很久,不知道如何解决,如果大家有解决方案的方法,希望可以共享一下,谢谢!!!
----已解决,配置消息回流即可
在/conf/activemq.xml的 destinationPolicy 下面配置如下信息
参考的文章来自
https://blog.csdn.net/keketrtr/article/details/49795257