ActiveMQ学习(六)

消费者集群负载均衡

broker服务器集群已经做好了,现在来看怎么做消费者集群。就是一个broker端有很多的消费者,在这一个端的消费者之间是集群。消费者端可以用多线程来实现。发送端(broker集群,双向连接)

建立第一个broker端的消费端:

        建立第二个broker端的消费端。这个消费端的for循环改为2,就是这个第一个broker端的消费者是1个,第二个broker端的消费者是2个。所以到现在为止搭建了broker的双向负载均衡集群,然后也建立了消费者集群,图示表示:

        运行两个接收端类和发送端类,查看运行消费的结果可以看的出来,虽然两个broker的消费者个数是不一样的,但是broker集群把两个Broker端当作相同个数的消费者,给两个broker端的消费的消息是一样多的。所以默认情况下消费者集群是非负载均衡的。

解释一下什么是消费端的负载均衡?

        就是在broker集群中,每个broker端有很多的消费者,每个broker端的消费者可以消费的个数是多少呢?这就是负载均衡。关于消费端的负载均衡,是通过核心配置文件中networkConnectors中的conduitsubscriptions属性来控制的:

        在上面的测试中默认的两个broker端的消费的消息个数是一样的,说明默认情况下broker集群中conduitsubscriptions属性的值是true。现在把值改为false,这样根据每个broker端的消费者的个数来分配消息的个数,意思是:比如broker-A消费者个数是1个,broker-B的消费者的个数是2个,那么启动整个代码之后就可以看到broker-A消费端消费的消息个数是1份,broker-B消费端消费的消息个数是2份。这样就实现了消费者的负载均衡。

搭建基于JDBC的动态(主从)集群

        之前学习的是搭建基于KahaDB存储的broker伪分布式集群,就是一个机器上启动多个broker。现在创建基于JDBC的主从集群。主从集群支持JDBC形式的,支持Zookper的,这里介绍使用JDBC实现ActiveMQ主从结构。

      

        意思就是集群中的MQ使用相同的数据库,对共享数据同一时刻只能有一个MQ操作,加锁--同步机制。下面是配置使用JDBC构建MQ集群的方式:

现在来配置一下基于JDBC的MQ集群。第一步:修改两个broker中MQ中核心配置文件activemq.xml的存储方式:

把配置文件中原来关于静态连接的注释掉:

        当然两个配置文件中要有mysql的配置。然后重新启动两个broker。现在搭建的集群就是:b1和b2是共享一个DB的。然后每一个broker上又有很多的cusmer。主从结构的集群就是主节点挂了话,从节点就会继续。

        现在测试。用我们的线程的方式。发送端就是使用failover协议的,然后randomiae参数值是false的发送端。接收端是使用线程的两个broker接收端的类。发送端发到localhost的broker上,然后先运行另一个broker的接收端,接收到3个就中断他,然后启动localhost的broker的接收端,就把剩下的接受了,所以动态集群下,对于客户端来说消费哪一个broker都是一样的。现在我们去把localhost的那个broker关闭掉。那个对应的localhost端的消费者肯定是不能用了,但是因为我们用的动态集群,另一个broker就会作为主节点了,他那边的消费者应该是可以使用的,所以我们去运行一下另一个broker端的消费者,发现是可以正常消费剩余的消息的。现在我们验证了,搭建了动态集群。即使有一个broker挂了,另一个broker还能正常使用来保证集群的正常使用。

        这种动态的主从结构的消息系统,把消息存储进数据库了,数据库里面的消息对于所有的消费者是共享的。对于数据库来说两个broker相当于消费者。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3161662/blog/2874773

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值