ActiveMQ broker 集群, 静态发现和动态发现
下载 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 集群, 静态发现和动态发现相关推荐
- activemq broker集群_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ
来自:知乎,作者:Will 链接:https://www.zhihu.com/question/43557507 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 ...
- Etcd教程 — 第二章 Etcd集群静态发现
Etcd教程 - 第二章 Etcd集群静态发现 一.Etcd集群安装方式 二.Etcd集群静态发现 2.1 静态启动的方式 ※2.2 单机搭建Etcd集群 2.2.1 安装 goreman工具 2.2 ...
- 系统间通信方式之(ActiveMQ的集群方案介绍结束2之高潮部分了【(1master+2slave)*cluster】)(十九)
转载:http://blog.csdn.net/lifetragedy/article/details/51869032 ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这 ...
- ActiveMQ的集群与高可用
ActiveMQ的集群与高可用 针对大量的消息吞吐量.对MQ可用性要求非常严格的场景.或者非常复杂的消息处理关系情况下,单个MQ实例通常已经无法满足我们的需要,这时候ActiveMQ的集群和高可用方案 ...
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...
- Activemq的集群
Activemq的集群讲解 了解ActiveMQ ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在 ...
- 面对大规模 K8s 集群,如何先于用户发现问题?
作者 | 彭南光(光南) 来源 | 阿里巴巴云原生公众号 千里之堤,溃于蚁穴. 绪论 不知道大家是否经历过这样的情景:突然被用户告知系统出现问题,然后一脸懵地惶惶然排查修复:或是等到自己发现系统出现故 ...
- dubbo调用失败策略_面试官:dubbo负载均衡策略,集群容错策略,动态代理策略有哪些...
面试官心理分析 继续深问吧,这些都是用 dubbo 必须知道的一些东西,你得知道基本原理,知道序列化是什么协议,还得知道具体用 dubbo 的时候,如何负载均衡,如何高可用,如何动态代理. 说白了,就 ...
- activemq mysql集群配置_ActiveMQ专题--集群,高可用方案
ActiveMQ集群部署方式 Master-Slave部署方式 Broker-Cluster部署方式 Master-Slave与Broker-Cluster相结合的部署方式 Shared databa ...
最新文章
- Co-occurrence网络图在R中的实现
- Oracle启用和禁用触发器
- 惹怒程序员的十件事!需求变更居然不被排第一!
- 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结
- 惠普打印机节能环保认证证书_低成本高效办公 苏宁惠普超品日这几款打印机了解下!...
- 12 个非常有用的 JavaScript 技巧
- java 8 两个list_java集合框架综述
- python语言结构化语言_如何在python中处理结构化语言文件
- Spark:聚类算法
- ASP.net网页导出Excel中文乱码解决方案
- sass-------sass的基本介绍、node.js的sass工具
- 天津大学仁爱学院c语言期末考试题,天津大学仁爱学院2014-2015学年第1学期期末C语言复习...
- 华中科技大学计算机潘再余,华中科技大学2016年免试攻读研究生名单
- 在平板电脑与移动3G大爆炸的时代,昔日霸主微软的反击
- Generative Adversarial Networks(WGAN、SAGAN、BigGAN)
- Warframe漫谈:Ballas
- 【附源码】计算机毕业设计SSM网络求职招聘系统
- 对SAP中的公司、公司代码和工厂的理解
- 【UEFI实战】Redfish的BIOS实现1
- c语言贝塞尔函数J1,贝塞尔函数:_j0、_j1、_jn、_y0、_y1、_yn