ActiveMQ多集群的负载均衡

news/2024/7/9 23:59:07 标签: activemq, 负载均衡, 集群

    图一说明:
   1、集群一包含3个队列:Amq1、 Amq2、 Amq3;集群二包含2个队列:B mq1、B mq2
   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,之前以为只需要包含某一个集群的url,搞了半天发现没效果

测试集群的高可用性:

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集群的高可用,一般应用已经足够。本文更进一步,作为高性能和扩展性的应用,通过多个集群的方式扩展队列,使得消息可以同时发送到多个队列,也可以通过多个消费者消费同一队列的消息。
 
八、参考资料
  1. http://blog.csdn.net/jason5186/article/details/18703151
  2. http://activemq.apache.org/networks-of-brokers.html



http://www.niftyadmin.cn/n/1581381.html

相关文章

.NET 新品发布活动

在MSDN上看到.NET 2.0新品发布活动的公告,看到有福州的安排计划,很是高兴。http://www.microsoft.com/china/MSDN/Launch2005/index.aspx福州的朋友有多少会去参加呢&#xff1f;

老鼠之Atlas之旅(二):下载安装篇

在师傅的鼓励下,我的劲头越来越足拉!!! 首先要下载安装vs2005,地址是:http://www.586cn.com/down/soft/23703.html 我找了一天才找到的,是beta2的版本,我为了找他花了可5个小时啊 使用了emule,比特之类的东西. 2,下载atlas; 下载地址是:http://msdn.microsoft.com/asp.net/futu…

redis详解(一) 概述

首先&#xff0c;分布式缓存框架可以看成是nosql的一种 &#xff08;1&#xff09;什么是redis? redis 是一个基于内存的高性能key-value数据库。 (有空再补充&#xff0c;有理解错误或不足欢迎指正) &#xff08;2&#xff09;Reids的特点 Redis本质上是一个Key-Value类型的…

leetcode 206.反转链表

⭐️ 往期相关文章 ✨链接&#xff1a;数据结构-手撕单链表代码详解。 ⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;反转链表 1️⃣ 代码&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* }…

[原创] Volumetric 3-Dimensions Display (体三维显示技术)

最近研究了一下三维立体显示技术(属于较为宽泛的光通信技术外延&#xff0c;我个人觉得)&#xff0c;发觉这个领域真的非常“迷人”&#xff0c;特写出来与大家一起分享&#xff1b;) 目前的三维立体显示技术共可以分为分光立体眼镜 (Glasses-based Stereoscopic)、自动分光立体…

redis详解(二)数据类型详解

Redis常用数据类型详解 1&#xff0c;Redis最为常用的数据类型主要有以下&#xff1a; StringHashListSetSorted setpub/subTransactions 在具体描述这几种数据类型之前&#xff0c;我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的&#xff1a; 首先R…

日出日落!

日出而作&#xff0c;日入而息。生活就是这样&#xff0c;每天我们都在重复先前所做的事&#xff0c;也许你不这么认为&#xff0c;事实却告诉我们&#xff0c;事情不以我们的意志而转移。日入的时候&#xff0c;我们等待天明&#xff0c;黑暗为我们所厌恶。可当太阳升起的时候…

redis详解(三)面试题

1. 使用redis有哪些好处&#xff1f; (1) 速度快&#xff0c;因为数据存在内存中&#xff0c;类似于HashMap&#xff0c;HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型&#xff0c;支持string&#xff0c;list&#xff0c;set&#xff0c;sorted set&…