图一

    图一说明:
   1、集群一包含3个队列:Amq1、Amq2、Amq3;集群二包含2个队列:Bmq1、Bmq2
   2、生产者一生产的消息可以同时发送到群集1、集群2,生产者二也一样
   3、消费者一可以同时从集群1、集群2消费消息,消费者二也一样
   4、某一个集群挂了,生产者和消费者可以不间断使用其它集群发送,消费消息
 
一、本文目的
        本介绍多个集群的搭建和使用,并通过负载均衡方式使用同一生产者往多个集群发送消息或使用同一消费者从多个集群消费消息。
         
二、概念说明
         1、多个集群
                图一中,集群1包含三个activemq,集群2包含2个activemq,两个集群间数据可以共用
          2、负载均衡
                图一中,生产者1发送的消息可根据集群的负载分别发送到集群1或集群2,当其中一个集群挂掉时,生产者1仍然会向集群2发送消息
                图一中,消费者1,消费者2都可以从集群1,集群2中消费消息,当其中一个集群挂掉时,消费者仍然能从另外一个集群消息消息
          3、集群间的通讯:使用networkConnector配置
 
 
三、Activemq集群的搭建
      1、单个集群的搭建参考:http://www.cnblogs.com/gossip/p/5977489.html
            注意:集群1和集群2中broker的name不能一样,zkPath不能一样
      2、本文中主要搭建2个集群,集群1包含3个activemq、集群2包含2个activemq
IP:192.168.146.129
集群A 控制台 服务接口 集群通讯接口
Amq1 8161 51511 61601

Amq2

8162 51512 61602

Amq3

8163 51513 61603
 
 
四、Activemq集群之间通讯
     Activemq集群搭建有多个方法,本文主要是通过配置networkConnectors实现,该配置放在<broker>节点下,原理为集群1配置连接集群2的所有activemq,反之亦然。配置如下:

1、集群1的每个activemq配置如下:(集群1的url包含集群2所有的队列信息,端口为队列的服务端口)

<networkConnectors>

<networkConnector uri="static:(tcp://192.168.146.130:51511,tcp://192.168.1.101:51512)"/>

</networkConnectors>

   

2、集群2的每个activemq配置如下:(集群2的url包含集群1所有的队列信息,端口为队列的服务端口)

<networkConnectors>
<networkConnector uri="static:(tcp://192.168.146.129:51511,tcp://192.168.146.129:51512,tcp://192.168.146.129:51513)"/>

</networkConnectors>

五、消息生产者向多个集群发送消息

本例使用的是点对点消息队列的demo,使用方法请参考:

http://www.cnblogs.com/gossip/p/5970090.html

需要注意的几点:
1、各个集群只有Master节点的控制台才能使用
2、ActiveMQConnectionFactory的brokerURL必须包含所有集群队列节点的url,包括集群1和集群2,之前以为只需要包含某一个集群的ur,搞了半天发现没效果

测试集群的高可用性:

1、集群1和集群2都注册到了ZooKeeper,都有各自的Master节点

 

2、两个集群中都只有Master节点的管控台才可用(下图为集群中Master队列收到的消息)

 

3、消息随机送到不同集群的Master队列中

4、手动停止集群2的Master队列,生产者卡顿了一下后继续往集群1发送消息,中间的消息并没有中断

5、重新启动集群2的Master队列后,生产者又重新向集群2的Master队列发送消息

 

六、消费者从多个集群消费消息

1、只有1个消费者时,随机从两个集群中消费消息

2、启动两个不同的消费者,他们都同时从集群1、集群2的消费消息。停止其中一个消费者后不影响另外一个消费者

3、关闭集群2的一个队列后(集群2只有两个队列,关闭其中1个后,整个集群都失效了),两个消费者都只从集群1消费消息

七、总结
      上文中主要介绍了单个Activemq集群的高可用,一般应用已经足够。本文更进一步,作为高性能和扩展性的应用,通过多个集群的方式扩展队列,使得消息可以同时发送到多个队列,也可以通过多个消费者消费同一队列的消息。
 
八、参考资料
 
 
 
 
 
 
 

 

 
 

 
 
 

ActiveMQ(八)_多集群的负载均衡的更多相关文章

  1. 注意这几点,轻轻松松配置 Nginx + Tomcat 的集群和负载均衡

    Tomcat 集群是当单台服务器达到性能瓶颈,通过横向扩展的方式提高整体系统性能的有效手段.Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,可以通过简单的配置实现 Tomcat 集群 ...

  2. 在Linux上使用Nginx为Solr集群做负载均衡

    在Linux上使用Nginx为Solr集群做负载均衡 在Linux上搭建solr集群时需要用到负载均衡,但测试环境下没有F5 Big-IP负载均衡交换机可以用,于是先后试了weblogic的proxy ...

  3. 结合Apache和Tomcat实现集群和负载均衡 JK 方式 2 (转)

    本文Apache+Tomcat集群配置       基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apa ...

  4. 结合Apache和Tomcat实现集群和负载均衡 JK 方式

    本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实操经历记录而成,碰到些出入,以及个别地方依据个人的习惯,所以在一定程度上未能保持原文的完整性,还望原著者海涵. 因原文中有较多的 ...

  5. 结合Apache和Tomcat实现集群和负载均衡

    http://fableking.iteye.com/blog/360870 TomcatApacheJSP应用服务器Web  本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实 ...

  6. 使用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡出现的无法加载mod_jk.conf文件的问题

    用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡的 如果出现了问题,可以用cmd  cd到Apache安装文件的bin下,运行httpd文件,错误信息就会打印出来. ...

  7. motan负载均衡/zookeeper集群/zookeeper负载均衡的关系

    motan/dubbo支持负载均衡.zookeeper有集群的概念.zookeeper似乎也能做负载均衡,这3者是什么关系呢? 3个概念:motan/dubbo负载均衡.zookeeper集群.zoo ...

  8. tomcat集群与负载均衡

    参考文章http://kalogen.iteye.com/blog/784908,加上了自己调试过程中遇到的问题. 注1:实现此集群的方法参考了网上的很多文章,但由于很多文章都表明是原创的,故无法知道 ...

  9. signalR的集群与负载均衡

    signalR是相当不错的websocket应用,最近要做集群和负载均衡 主要用到了redis进行集群,signalR的backplane集成redis. 细节,订阅redis之后注意database ...

随机推荐

  1. 三维网格去噪算法(L0 Minimization)

    [He et al. 2013]文章提出了一种基于L0范数最小化的三角网格去噪算法.该思想最初是由[Xu et al. 2011]提出并应用于图像平滑,假设c为图像像素的颜色向量,▽c为颜色向量的梯度 ...

  2. USACO1.5Superprime Rid[附带关于素数算法时间测试]

    题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组 ...

  3. 利用注解进行sql反射代码示例

    @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Table { String val ...

  4. pullRefresh组件配置

    mui.init({ pullRefresh:{ container: '#contanier', indicators:false, up:{ height:200, contentinit: '' ...

  5. C语言:将结构体存放到文件中

    #include <stdio.h> #include <stdlib.h> #define MAXTLEN 70 #define MAXALEN 70 #define MAX ...

  6. C语言操作内存

    炒了个栗子 #include <stdio.h> #define N1 (5) #define N2 (7) #define N3 (3) int main(){ int *ip; int ...

  7. php碎片

    1.flock LOCK_EX 独占锁定 LOCK_SH 共享锁定 LOCK_UN 解除锁定 LOCK_NB 锁定但不堵塞进程,直接返回false 2. fseek SEEK_CUR SEEK_END ...

  8. BZOJ 1191 【HNOI2006】 超级英雄Hero

    Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回 ...

  9. IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表

    浏览器兼容问题一直是前段开发工程师比较头痛的问题,熟悉了里面的规则也就变得简单了,这里有一份资料可以分享给大家,大家平时开发过程中遵循这个规律的话,会变得轻松多了: 各浏览器CSS hack兼容表: ...

  10. oracle:如何用sql生成日历

    BI分析中,经常需要将事实表与时间维度表关联起来,按年/月/日来逐层展示,常用的做法是创建一张日历表,结构类似如下: create table T_BAS_CALENDAR ( d_year ) no ...