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
}
ActiveMQ broker 集群, 静态发现和动态发现的更多相关文章
- ActiveMQ笔记(4):搭建Broker集群(cluster)
上一篇介绍了基于Networks of Borkers的2节点HA方案,这一篇继续来折腾Networks of Brokers,当应用规模日渐增长时,2节点的broker可能仍然抗不住访问压力,这时候 ...
- ActiveMQ: 搭建Broker集群(cluster)
上一篇介绍了基于Networks of Borkers的2节点HA方案,这一篇继续来折腾Networks of Brokers,当应用规模日渐增长时,2节点的broker可能仍然抗不住访问压力,这时候 ...
- ActiveMQ的集群方案对比及部署
转载:http://blog.csdn.net/lifetragedy/article/details/51869032 ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这 ...
- ActiveMQ实战-集群
原文:http://blog.csdn.net/lifetragedy/article/details/51869032 ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这 ...
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...
- ActiveMQ伪集群部署
本文借鉴http://www.cnblogs.com/guozhen/p/5984915.html,在此基础上进行了完善,使之成为一个完整版的伪分布式部署说明,在此记录一下! 一.本文目的 介绍如何在 ...
- Kafka 单节点多Kafka Broker集群
Kafka 单节点多Kafka Broker集群 接前一篇文章,今天搭建一下单节点多Kafka Broker集群环境. 配置与启动服务 由于是在一个节点上启动多个 Kafka Broker实例,所以我 ...
- activemq 搭建--集群
linux activmemq 集群安装,配置和高可用测试 从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于Z ...
- 分布式-信息方式-ActiveMQ的集群
ActiveMQ的集群Queue consumer clusters ActiveMQ支持 Consumer对消息高可靠性的负载平衡消费,如果一个 Consumer死掉,该消 ...
随机推荐
- jenkins+ant+jmeter自动化性能测试平台
jenkins+ant+jmeter自动化性能测试平台 Jmeter是性能测试的工具,java编写.开源,小巧方便,可以图形界面运行也可以在命令行下运行.网上已经有人使用ant来运行,http://w ...
- openlayer ol.js和ol-debug.js的使用 调试技巧
二者实现的功能是一样的,有以下区别 : ol.js一般打包项目的时候使用, ol-debug.js编写代码调试的时候使用. 下边是用ol-debug.js编写代码调试的显示: 编写代码调试的技巧,所有 ...
- JavaScript中的方法事件和函数的方法的三种方法
js中的很多事件 而事件相对应的就是方法(函数 )那么今天所说的就是这三种方法 已onclick事件为例 1: 基本方法 <div id="a" onclick= ...
- Unity--game
打怪兽--头像状态 Git :https://github.com/vinieo/attck 打怪兽--背景音乐音量 Git :https://github.com/vinieo/ack_bgm 小球 ...
- CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义)
转载自:http://blog.csdn.net/u014175572/article/details/51535768 CSS3的transform:scale()可以实现按比例放大或者缩小功能. ...
- Error: Program type already present: okhttp3.Authenticator$1
在app中的build.gradle中加入如下代码, configurations { all*.exclude group: 'com.google.code.gson' all*.exclude ...
- django会话session
因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的.通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于静 ...
- Pycharm设置去除显示的波浪线
1.选择文件选择file—Settings,如下图打开setting对话框 2.选择Editur—Color Scheme—General选项,然后选择右边对话框中的Errors and Warnin ...
- Asp.net core 学习笔记 ( Azure key-vault )
参考 : https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2 ...
- 连续子数组和 Continuous Subarray Sum
2018-10-03 01:12:42 问题描述: 问题求解: 本题本质上其实是一个preSum问题的变种,每次求preSum % k,并将之保存到map中,如果之后再次得到相同的余数,则表示这两者之 ...