概述

在ActiveMQ运行过程中,如果发生某个queue只有生产者没有消费者的情况时,消息就会产生积压。Network of brokers模式通过将积压的消息转发给处于同一network的其它broker的方式很好地解决了这个问题,但这个模式也有问题。

基本配置

vim conf/activemq.xml
<broker>
....
   <networkConnectors>
<networkConnector uri="static:(tcp://localhost:20001,tcp://localhost:20010,tcp://172.16.1.14:20001,tcp://172.16.1.14:20002,tcp://172.16.1.14:20003,tcp://172.16.1.14:20004)"/>
</networkConnectors>
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
....
</broker> 

注:

1、<networkConnector uri="static:(....)">,括号中的实例要包括自己。可以理解为这些实例组成了一个网络,相互可以进行消息接收,但是只有做了这项配置的broker才能够将消息转发给网络中的其它broker。

2、activemq create /path/<broker_name>,注意network中的broker_name不能相同,相同则只有一个被本地broker当作消费者。

控制台展示

注:

1、标1的是真实消费者,一般由应用程序产生,标2的是网络中的其它broker,本地broker将消息转发给它们。

2、可以看出,本地broker将network中的其它broker和APPConsumer都当做是自己的消费者,平均分发消息。

3、本人猜想,这种模式实际上会增加broker的I/O消耗,因为同一条消息被接收和发送了两次。

4、broker通常用于异步通信,消息的即时性没那么强,实际生产中即使消费者宕了,我们只需通知让租户重启消费者即可,不必急于将消息分发出去。

5、这种模式并不会起到负载均衡的作用,因为发送给其它broker也消耗网络IO,反而加重了负载。通常直接在客户端侧做负载均衡更加方便。

6、network of brokers模式默认是单向的,即开通该功能的broker不会再接收消息,这意味着只有部分broker能够开启这个功能,而且会加重剩余broker的负载。

7、当集群规模较大时,这种方式还会使得生产者和消费者关系紊乱,不利于追踪消息的走向。对于消息中间件的部署,个人以为,简单即正义。

8、总之,对于异步通信而言,我们通常允许消息积压,但不允许消息丢失,而网络又是不可靠的,所以一般不用这种模式。

ActiveMQ-Network of brokers集群模式的更多相关文章

  1. 关于ActiveMQ的几种集群配置

    ActiveMQ的几种集群配置. Queue consumer clusters 此集群让多个消费者同时消费一个队列,若某个消费者出问题无法消费信息,则未消费掉的消息将被发给其他正常的消费者,结构图如 ...

  2. ActiveMQ的几种集群配置

    ActiveMQ是一款功能强大的消息服务器,它支持许多种开发语言,例如Java, C, C++, C#等等.企业级消息服务器无论对服务器稳定性还是速度,要求都很高,而ActiveMQ的分布式集群则能很 ...

  3. Redis 5.0.7 讲解,单机、集群模式搭建

    Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...

  4. Greenplum源码编译安装(单机及集群模式)完全攻略

    公司有个项目需要安装greenplum数据库,让我这个gp小白很是受伤,在网上各种搜,结果找到的都是TMD坑货帖子,但是经过4日苦战,总算是把greenplum的安装弄了个明白,单机及集群模式都部署成 ...

  5. Spark集群模式概述

    作者:foreyou出处:http://www.foreyou.net/2015/06/22/spark-cluster-mode-overview/声明:本文采用以下协议进行授权: 署名-非商用|C ...

  6. Redis进阶实践之十 Redis主从复制的集群模式

    一.引言        Redis的基本数据类型,高级特性,与Lua脚本的整合等相关知识点都学完了,说是学完了,只是完成了当前的学习计划,在以后的时间还需继续深入研究和学习.从今天开始来讲一下有关Re ...

  7. Redis进阶实践之十 Redis哨兵集群模式

    一.引言             上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...

  8. activemq+Zookeper高可用集群方案配置

    在高并发.对稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群方案.从ActiveMQ 5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式 ...

  9. Kafka集群模式安装(二)

    我们来安装Kafka的集群模式,三台机器: 192.168.131.128 192.168.131.130 192.168.131.131 Kafka集群需要依赖zookeeper,所以需要先安装好z ...

随机推荐

  1. 洛谷 P1495 曹冲养猪

    这是一道标准的孙子定理的题,题意浅显,思路明确 然后我就交了整整16遍啊,欺负人啊,题解暴力就能过,我就TLE ..悲惨的提交记录 下面是题面 题目描述 自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干 ...

  2. 前端开发学习之——利用模板实现涉及url问题时的bug分析及解决(chrome源码)

    例如我们要实现如下页面,其中历史页面列表想来自底层返回的数据,此处用testData代替: 最初我写的实现代码如下: html文件: <!doctype html> <html cl ...

  3. 解决Maven下载依赖慢

    微服务spring boot,在使用maven下载依赖的时候非常慢,几十K的依赖JAR,也需要漫长的等待,更悲剧呢的漫长等待结果提示下载失败,为彻底解决这个问题,决定使用国内的镜像库,想象总是美好的, ...

  4. Unity3D for VR 学习(10): Unity LOD Group 组件

    LOD (Level of Detail), 远小近大思想. LOD,在Unity中是用到了空间换时间的优化方法:即程序加载2套模型,导致包会增大:在运行时刻,远处的用面数少的模型–模糊一些,近处用面 ...

  5. Linux内核设计第五周学习总结 分析system_call中断处理过程

    陈巧然原创作品 转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 使用gdb跟踪分析一 ...

  6. JAVA本地TXT文件解决中文乱码问题

    import java.io.*; public class ReadFile { public static void main(String[] args) { try { File file = ...

  7. 序列计数(count)

    Portal -->broken qwq Description ​​  给你一个长度为\(n\)的序列,序列中的每个数都是不超过\(m\)的正整数,求满足以下两个条件的序列数量: 1.序列中至 ...

  8. @Springboot搭建项目controller层接收json格式的对象失败

    今天在使用swagger2测试的时候出错 1.@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说: ...

  9. fastjson的@JSONField注解的一点问题

    @JSONField 看源码它可以作用于字段和方法上. 引用网上说的, 一.作用Field @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称. 但是 ...

  10. 谷歌地图 API 开发之添加标记(解析以及补充)

    今天又看了下官网,发现官网上有地图标记的详细说明.当时居然眼瞎看不见,还琢磨了好久...#$%^&,一定是项目太急,没看到(^o^)/~地址:https://developers.google ...