ActiveMQ学习笔记(9)----ActiveMQ静态网络连接
1. 启动多个Broker
在win10下同一台服务器启动多个Broker,
步骤如下:
1. 复制安装目录下的conf文件夹命名为conf2
2. 修改activemq.xml中的brokerName不能跟之前的一样。如:

3.修改数据存放的名称,如下:

4. 修改所有的transportConnectors端口,都要跟之前的不一样

修改jetty.xml下的

5. 复制bin目录重命名为bin2
修改activemq中的
ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf"
改为
ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf2"
修改程序的pid,不能跟前面的重复

修改所有activemq.bat中的/conf替换成/conf2
bin2/win64下的ctivemq.bat中也一样,修改bin2/win64wrapper.conf为
set.default.ACTIVEMQ_CONF=%ACTIVEMQ_BASE%/conf2
分别启动两个不同的broker,结果如下


2. ActiveMQ静态网络连接
2.1 ActiveMQ的networkConnector是什么?
在某些场景下,需要多个ActiveMQ的Broker做集群,那么就涉及到了Broker到Broker的通信,这个被称为ActiveMQ的networkConnector。
ActiveMQ的networkConnector默认是单向的,一个Broker在一端发送消息,另一个Broker在另一端接收消息。这就是所谓的“桥接”.ActiveMQ也支持双向链接,创建一个双向的通道对于两个Broker,不仅发送消息而且也能从相同的通道来接收消息,通常作为duplex connector来映射,如下:

2.2 “Discovery"的概念
一般情况下,discovery是被用来发现远程服务的,客户端通常想去发现所有可利用的brokers;另一层意思是,它是基于现有的网络Broker去发现其他可用的Brokers。
有两种配置Client到Broker的连接方式,一种方式是:Client通过Statically配置的方式去连接Broker,另一种方式是:Client通过discovery agents来dynamically的发现Brokers
2.3 Static networks
Static networkConnector是用于创建一个静态配置对于网络中的多个Broker,这种协议用于复合url,一个复合url包括多个url地址,格式如下:
static://(uri1,uri2,uri3....)?key=value
1. 配置实例如下
<networkConnectors>
<networkConnector name="local network" uri="static://(tcp://localhost:61616)"/>
</networkConnectors
2. Static networks基本原理示意图

测试:使用生产者从端口为61716端口发送消息,使用消费者从端口61616接收消息,可能看到能够成功的接收消息。但是从使用生产者从端口为61616端口发送消息,使用消费者从端口61716接收消息,是不能成功的接收消息的,这就说明了static network默认是单向的。
那么加入BrokerA中有一个消费者,BrokerB有一个消费者,当生产者想BrokerB中发送消息的时候,是哪个消费者先收到呢?
这里做了一个测试,将static network,设置成双向连接的,然后使用两个不同的消费者分别连接BrokerA和BrokerB,当想BrokerB中发送消息时,使用多线程同时启动两个不同的消费者,观察到的现象是消息几乎被连接BrokerA的消费者消费完了。再发送到BrokerA,也同时启动两个不同的消费者,发现消息几乎被连接BrokerB的消费者消费了,所以在默认不采取负载均衡的情况下,网络中的消费者消费消息的能力是优于本机消费者的。
2.4 networkConnector配置的可用属性
1. name: 默认是bridge
2. dynamicOnly: 默认是false,如果为true,持久订阅被激活时才会创建对应的网络持久订阅,默认是启动时激活
3. decreaseNetworkConsumerPriority: 默认是false,设定消费者优先权,如果为true,网络的消费者优先降低为-5,如果为false,则默认跟本地消费者一样为0.
4. networkTTL:默认是1,网络中用于消息和订阅消费者的broker数量。
5. messageTTL:默认是1,网络中用于消息的broker数量。
6. consumerTTL:默认是1,网络中用于消费的broker数量。
7. dynamicallyIncludeDestinaitons: 默认为空,要包括的动态消息地址,类似于excludedDestinations.如:
<dynamicallyIncludeDestinaitons>
<queue physicalName="include.test.foo"/>
<topic physicalName="include.test.bar"/>
</dynamicallyIncludeDestinaitons>
8. staticallyIncludedDestinations: 默认为空,要包括的静态消息地址,类似于excludedDestations.如:
<staticallyIncludeDestinaitons>
<queue physicalName="aways.include.queue"/>
</staticallyIncludeDestinaitons>
9. excludeDestinations: 默认为空,指定排除的地址,示例如下:
<excludedDestinaitons>
<queue physicalName="include.test.foo"/>
<topic physicalName="include.test.bar"/>
</excludedDestinaitons>
7.8.9的完整配置如下:
<networkConnectors>
<networkConnector name="local network" uri="static://(tcp://localhost:61616,tcp://localhost:61716)"/>
<dynamicallyIncludeDestinaitons>
<queue physicalName="include.test.foo"/>
<topic physicalName="include.test.bar"/>
</dynamicallyIncludeDestinaitons>
<staticallyIncludeDestinaitons>
<queue physicalName="aways.include.queue"/>
</staticallyIncludeDestinaitons>
<excludedDestinaitons>
<queue physicalName="include.test.foo"/>
<topic physicalName="include.test.bar"/>
</excludedDestinaitons>
</networkConnectors>
10. duplex:默认false,设置是否能双向通信
配置如下:
<networkConnectors>
<networkConnector duplex="true" name="local network" uri="static://(tcp://localhost:61616,tcp://localhost:61716)"/>
</networkConnectors>
配置之后即可从61616端口生产消息之后,61716端口能够接收到消息。
11. prefetchSize: 默认是1000,持有的未确认的最大消息数量,必须大于0,因为网络消费者不能自己轮询消息。’
12. suppressDuplicateQueueSubscriptions: 默认false,如果为true,重复的订阅关系一生产即被组织。
13. bridgeTempDestinations: 默认true,是否广播advisory message来创建临时destination
14. alwaysSyncSend: 默认false,如果为true,非持久化消息也将使用request/reply方式代替oneway方式发送到远程broker
15. staticBridge: 默认false,如果为true,只有staticallyIncludedDestinations中配置的destination可以被处理。
16.conduitSubscriptions: 默认true,是否把同一个broker的多个consumer当做一个来处理(在做集群的时候如果有多个consumer,需要设置为false)
3. ”丢失“的消息--消息回流
有这样的场景,broker1和broker2通过networkConnector连接,一些consumers连接到broker1,一些消费broker2上的消息。消息先被broker1从broker2上消费掉,然后转发给这些consumers,不幸的是转发部分消息的时候broker1重启了,这些consumers发现broker1连接失败,通过failover连接到broker2上去了,但是一部分他们还没有消费的消息被broker2已经分发到broker1上去了,这些消息就好像消失了,除非有消费者重新连接到broker1上来消费,这怎么办呢?
从5.6版开始,在destinationPolicy上新增选项replayWhenNoConsumers。这个选项使得broker1上有需要转发的消息但是没有被消费时,把消息回流到它原始的broker.同时把enableAudit设置为false,为了防止消息回流后被当作重复消息而不被分发,示例如下:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" enableAudit="false">
<networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/>
</networkBridgeFilterFactory>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
ActiveMQ学习笔记(9)----ActiveMQ静态网络连接的更多相关文章
- ActiveMQ学习笔记(5)——使用Spring JMS收发消息
摘要 ActiveMQ学习笔记(四)http://my.oschina.net/xiaoxishan/blog/380446 中记录了如何使用原生的方式从ActiveMQ中收发消息.可以看出,每次 ...
- ActiveMQ学习笔记(12)----ActiveMQ的集群
1. Queue consumer cluster ActiveMQ支持Consumer对消息的高可靠性的负载均衡消费,如果一个Consumer死掉,该消息会转发到其他的Consumer消费的Queu ...
- ActiveMQ学习笔记(17)----Message高级特性(一)
1. Messaage Properties ActiveMQ支持很多消息属性,具体可以参考 http://activemq.apache.org/activemq-message-propertie ...
- ActiveMQ学习笔记(8)----ActiveMQ的消息存储持久化
1. 概述 ActiveMQ不仅支持persistent和non-persistent两种方式,还支持消息的恢复(recovery)方式. 2. PTP Queue的存储是很简单的,其实就是FIFO的 ...
- ActiveMQ学习笔记(1)----初识ActiveMQ
1. 什么是ActiveMQ? ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和j2ee1.4规范的JMS Provider实现的消息中间件(Message Oriented ...
- Docker学习笔记之-通过Xshell连接 CentOS服务
上一节演示如何在虚拟机中安装 CentOS服务,Docker学习笔记之-在虚拟机VM上安装CentOS 7.8 本节主要演示如何通过 Xshell软件链接CentOS服务,本例以虚拟机作为演示,直接在 ...
- ActiveMQ学习笔记(11)----ActiveMQ的动态网络连接
1. 多播协议multicast ActiveMQ使用Multicast协议将一个Service和其他的Broker是我Service里连接起来.IP Multicast是一个被用于网络中传输数据到其 ...
- ActiveMQ学习笔记(10)----ActiveMQ容错的连接
1. Failover Protocol 前面讲述的都是Client配置连接到指定的broker上,但是,如果Broker的连接失败怎么办呢?此时,Client有两个选项:要么立刻死掉,要么连接到其他 ...
- 学习笔记-记ActiveMQ学习摘录与心得(二)
上个周末被我玩过去了,罪过罪过,现在又是一个工作日过去啦,居然有些烦躁,估计这几天看的东西有点杂,晚上坐下来把自己首要工作任务总结总结.上篇学习博客讲了ActiveMQ的特性及安装部署,下面先把我以前 ...
随机推荐
- 迭代器与函数Python学习(四)
1.1 迭代器: 迭代的工具 1.1.1 什么是迭代: 指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值 while True: print('=====> ...
- Android WebView回退
在使用webView时,会出现点击按钮让网页页面回到上一个页面的需求,这时可以使用goBack方法. 但是有的安卓用户会习惯点击手机自带的返回按钮,这时会直接关闭当前的activity,而不是网页页面 ...
- Python 之 PyCharm使用
PyCharm 的官方网站地址是:https://www.jetbrains.com/pycharm/download/ 教育版:https://www.jetbrains.com/pycharm- ...
- Python写99乘法表
#!/usr/bin/python# -*- encoding:utf-8 -*- for i in range(1,10): s='' for j in range(1,i+1): ...
- 修改properties文件后系统运行异常
今天修改了项目的properties配置文件以后,运行会报异常,即使将内容改回,异常仍然存在.中间还会出现项目报错等问题,现将解决方法整理出来. 1.修改properties的打开方式,将打开方式从p ...
- 在centos6.5上升级php-libxml版本到2.9.0
当前系统,软件版本说明: php libxml glibc 2.12 zlib xz-libs 需求: 应开发的需求,线上环境,php-libxml版本升级到2.8以上. 升级步骤:1.安装工具集 y ...
- Bzoj 2502: 清理雪道 有上下界网络流_最小流
好长时间没有写网络流了,感觉好手生.对于本题,设一个源点 $s$ 和 $t$.1.由 $s$ 向每个点连一条没有下界,容量为无限大的边,表示以该点为起点.2.由每个点向 $t$ 连一条没有下界,容量为 ...
- 连连看 HDU - 1175_搜索_剪枝
hdu有毒,考试上 AC 的就是一直 WA- 其实这道题是可以进行初始化来进行优化的,这样的话询问次数是可以达到 10510^5105 的.不过普通的 dfsdfsdfs + 剪枝也是可过的. Cod ...
- 论wpf的设备无关性 - 简书
原文:论wpf的设备无关性 - 简书 WPF从发布之日起,一直将“分辨率无关(resolution independence)”作为其亮点,声称使用WPF制作的用户界面在轻巧的Ultra-Mobile ...
- jquery中的jsonp跨域调用(接口)
jquery jsonp跨域调用接口