下载 activemq 压缩包解压后,conf 目录下有各种示例配置文件,红线标出的是静态发现和动态发现的配置。

1. 静态配置

启动3个 broker,端口分别为61616,61618,61620,配置如下:

<networkConnectors></networkConnectors>
<transportConnectors><transportConnector name="openwire" uri="tcp://localhost:61616"/>
</transportConnectors>

<networkConnectors><networkConnector uri="static:(tcp://localhost:61616)" duplex="true"/>
</networkConnectors>
<transportConnectors><transportConnector name="openwire" uri="tcp://localhost:61618"/>
</transportConnectors>

<networkConnectors><networkConnector uri="static:(tcp://localhost:61616,tcp://localhost:61618)" duplex="true"/>
</networkConnectors>
<transportConnectors><transportConnector name="openwire" uri="tcp://localhost:61620"/>
</transportConnectors>

3个 broker 组成了一张网,当 producer 发送消息给 broker:61616 后,broker:61618 的消费者可以收到该消息。消息从 broker:61616 流动到 broker:61618,底层原理是 broker:61618 是 broker:61616 的一个消费者。

2. 动态配置

同样地, 启动3个 broker,端口分别为61616,61618,61620,配置如下:

<networkConnectors><networkConnector uri="multicast://default"/>
</networkConnectors><transportConnector name="openwire" uri="tcp://0.0.0.0:61616" discoveryUri="multicast://default" />
</transportConnectors>

<networkConnectors><networkConnector uri="multicast://default"/>
</networkConnectors>
<transportConnectors><transportConnector name="openwire" uri="tcp://0.0.0.0:61618" discoveryUri="multicast://default" />
</transportConnectors>

<networkConnectors><networkConnector uri="multicast://default"/>
</networkConnectors>
<transportConnectors><transportConnector name="openwire" uri="tcp://0.0.0.0:61620" discoveryUri="multicast://default" />
</transportConnectors>

使用多播协议,把 3 个 broker 动态地组成了一张网。

// 省略其他代码
public class MulticastDiscoveryAgent implements DiscoveryAgent, Runnable {public static final String DEFAULT_DISCOVERY_URI_STRING = "multicast://239.255.2.3:6155";public static final String DEFAULT_HOST_STR = "default"; public static final String DEFAULT_HOST_IP  = System.getProperty("activemq.partition.discovery", "239.255.2.3"); public static final int    DEFAULT_PORT  = 6155; private static final Logger LOG = LoggerFactory.getLogger(MulticastDiscoveryAgent.class);private static final String TYPE_SUFFIX = "ActiveMQ-4.";private static final String ALIVE = "alive.";private static final String DEAD = "dead.";private static final String DELIMITER = "%";private static final int BUFF_SIZE = 8192;private static final int DEFAULT_IDLE_TIME = 500;private static final int HEARTBEAT_MISS_BEFORE_DEATH = 10;public void run() {byte[] buf = new byte[BUFF_SIZE];DatagramPacket packet = new DatagramPacket(buf, 0, buf.length);while (started.get()) {// 发送多播数据
            doTimeKeepingServices();try {// 接收多播数据
                mcast.receive(packet);if (packet.getLength() > 0) {String str = new String(packet.getData(), packet.getOffset(), packet.getLength());processData(str);}} catch (SocketTimeoutException se) {// ignore} catch (IOException e) {if (started.get()) {LOG.error("failed to process packet: " + e);}}}}
}

3. broker 集群的原理

如上图,61616和61618组成集群,当61618加入一个consumer时,61618向61616发送一条ConsumerInfo消息,这样61618就成为了61616的consumer。

ConsumerInfo 示例:

ConsumerInfo {commandId = 4, responseRequired = false, consumerId = dynamic-broker1->dynamic-broker2-1872-1524494145961-2:1:1:1, destination = queue://TEST.BAT, prefetchSize = 1, maximumPendingMessageLimit = 0, browser = false, dispatchAsync = true, selector = null, clientId = ID:USER-20140617MT-1882-1524494166015-0:1, subscriptionName = null, noLocal = false, exclusive = true, retroactive = false, priority = -5, brokerPath = [ID:USER-20140617MT-1877-1524494148767-0:1], optimizedAcknowledge = false, noRangeAcks = false, additionalPredicate = org.apache.activemq.command.NetworkBridgeFilter@413249b
}

转载于:https://www.cnblogs.com/allenwas3/p/8872822.html

ActiveMQ broker 集群, 静态发现和动态发现相关推荐

  1. activemq broker集群_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ

    来自:知乎,作者:Will 链接:https://www.zhihu.com/question/43557507 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 ...

  2. Etcd教程 — 第二章 Etcd集群静态发现

    Etcd教程 - 第二章 Etcd集群静态发现 一.Etcd集群安装方式 二.Etcd集群静态发现 2.1 静态启动的方式 ※2.2 单机搭建Etcd集群 2.2.1 安装 goreman工具 2.2 ...

  3. 系统间通信方式之(ActiveMQ的集群方案介绍结束2之高潮部分了【(1master+2slave)*cluster】)(十九)

    转载:http://blog.csdn.net/lifetragedy/article/details/51869032 ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这 ...

  4. ActiveMQ的集群与高可用

    ActiveMQ的集群与高可用 针对大量的消息吞吐量.对MQ可用性要求非常严格的场景.或者非常复杂的消息处理关系情况下,单个MQ实例通常已经无法满足我们的需要,这时候ActiveMQ的集群和高可用方案 ...

  5. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...

  6. Activemq的集群

    Activemq的集群讲解 了解ActiveMQ ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在 ...

  7. 面对大规模 K8s 集群,如何先于用户发现问题?

    作者 | 彭南光(光南) 来源 | 阿里巴巴云原生公众号 千里之堤,溃于蚁穴. 绪论 不知道大家是否经历过这样的情景:突然被用户告知系统出现问题,然后一脸懵地惶惶然排查修复:或是等到自己发现系统出现故 ...

  8. dubbo调用失败策略_面试官:dubbo负载均衡策略,集群容错策略,动态代理策略有哪些...

    面试官心理分析 继续深问吧,这些都是用 dubbo 必须知道的一些东西,你得知道基本原理,知道序列化是什么协议,还得知道具体用 dubbo 的时候,如何负载均衡,如何高可用,如何动态代理. 说白了,就 ...

  9. activemq mysql集群配置_ActiveMQ专题--集群,高可用方案

    ActiveMQ集群部署方式 Master-Slave部署方式 Broker-Cluster部署方式 Master-Slave与Broker-Cluster相结合的部署方式 Shared databa ...

最新文章

  1. Co-occurrence网络图在R中的实现
  2. Oracle启用和禁用触发器
  3. 惹怒程序员的十件事!需求变更居然不被排第一!
  4. 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结
  5. 惠普打印机节能环保认证证书_低成本高效办公 苏宁惠普超品日这几款打印机了解下!...
  6. 12 个非常有用的 JavaScript 技巧
  7. java 8 两个list_java集合框架综述
  8. python语言结构化语言_如何在python中处理结构化语言文件
  9. Spark:聚类算法
  10. ASP.net网页导出Excel中文乱码解决方案
  11. sass-------sass的基本介绍、node.js的sass工具
  12. 天津大学仁爱学院c语言期末考试题,天津大学仁爱学院2014-2015学年第1学期期末C语言复习...
  13. 华中科技大学计算机潘再余,华中科技大学2016年免试攻读研究生名单
  14. 在平板电脑与移动3G大爆炸的时代,昔日霸主微软的反击
  15. Generative Adversarial Networks(WGAN、SAGAN、BigGAN)
  16. Warframe漫谈:Ballas
  17. 【附源码】计算机毕业设计SSM网络求职招聘系统
  18. 对SAP中的公司、公司代码和工厂的理解
  19. 【UEFI实战】Redfish的BIOS实现1
  20. c语言贝塞尔函数J1,贝塞尔函数:_j0、_j1、_jn、_y0、_y1、_yn

热门文章

  1. 《Selenium自动化测试指南》—第1章1.1节自动化测试基础
  2. php pdo预处理语句与存储过程
  3. vsftp建立虚拟用户不同目录分配不同权限操作步骤详解
  4. 【面试题】C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别
  5. ubuntu server 10.04 NFS 添加共享目录
  6. 中国互联网发展的两个瓶颈
  7. DCD DSR DTR RTS CTS表示什么意思
  8. 数字化转型里面的这些名词都是什么关系呢?
  9. 任何比较的排序algorithm都需要nlogn
  10. RTS寻路相关资料收集