activeMq集群实现方式

前提

都是通过  networkConnectors 这个节点来配置的,安装就不说了,请自行百度一下....

配的是虚拟集群,如果有多台机器,其实就不需要修改端口了,可以省去不看

第一种方案

有两台activemq 来集群

一台端口为   8161 ,服务端口为 61616 

一台端口为   8262 ,服务端口为 62626

修改这8161 端口请到  /conf/jetty.xml 中修改,搜索一下8161 改为 8162 就行

修改61616 端口请到 /conf/activemq.xml 中修改,搜索一下61616 改为 61626 

同时记得把下面标红的去掉,如果没有,则忽略即可,因为端口太多了,这个应该是其他方式来连接

activeMq集群实现方式_第1张图片


然后在任意一台的 /conf/activemq.xml 的 broker 节点中加入一个子节点



duplex 双工的意思

加完启动即可,是不是很简单呢


第二种方案

是建立在第一种方案上面的,因为activemq集群的消息并不会相互存储

activeMq集群实现方式_第2张图片


那么问题就很明显了,如果有多台机进行集群,那经过的路径就会越来越复杂,这是肯定的,所以出现了另一种方案

再加一个节点来代理这两台

端口为   8263 ,服务端口为 62636

配置就完全不一样了

原来61和62那两台就不需要加networkConnectors 节点了,把这个节点加在63上,而且也跟原来不一样,需要代理另外两台,如下



然后另外两台只需要保证broker 节点的 brokerName 不同即可

不过这样配置完又会出现一个问题,就是 63这台又会出现一个单点故障的问题,所以再加一台来解决这个问题

端口为   8264 ,服务端口为 62646

只需要再配置这台的文件为




加入了對上面那台的集群,这样就可以解决这个问题了,这样改进后集群变为下面这样的

activeMq集群实现方式_第3张图片


然后在说一下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 下面配置如下信息


                     
                         
                     

                 


activeMq集群实现方式_第4张图片


参考的文章来自

https://blog.csdn.net/keketrtr/article/details/49795257


你可能感兴趣的:(学习篇)