ActiveMQ学习(六)

Wesley13
• 阅读 315

消费者集群负载均衡

ActiveMQ学习(六)

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

ActiveMQ学习(六)

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

ActiveMQ学习(六)

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

ActiveMQ学习(六)

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

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

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

ActiveMQ学习(六)

        在上面的测试中默认的两个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主从结构。

      ActiveMQ学习(六)

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

ActiveMQ学习(六)

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

ActiveMQ学习(六)

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

ActiveMQ学习(六)

ActiveMQ学习(六)

        当然两个配置文件中要有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相当于消费者。

点赞
收藏
评论区
推荐文章
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Wesley13 Wesley13
1年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
1年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Stella981 Stella981
1年前
Dubbo与Zookeeper在Window上的安装与简单使用
一:Dubbo是什么?有什么用途??  使用Dubbo可以将应用分布到多个服务器上,当有访问时,Dubbo有帮你管理自动将请求分配给合适得到服务器去执行,即建立多个生产者,建立多个消费者,自动匹配生产者与消费者,以便达到负载均衡。关于集群与负载均衡的一些概念的简单解释也可以参考《大话集群和负载均衡(https:/
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
3A网络 3A网络
4个月前
理解 virt、res、shr 之间的关系(linux 系统篇)
理解virt、res、shr之间的关系(linux系统篇)前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过t
3A网络 3A网络
4个月前
开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
开发一个不需要重写成HiveQL的大数据SQL引擎学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。各种知识表象看杂乱无章,若只是学习
helloworld_34035044 helloworld_34035044
6个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为