activeMq-集群

在一台服务器上启动多个Broker

把整个conf文件夹复制一份,比如叫做conf2
修改里面的activemq.xml文件
(1)里面的brokerName 不能跟原来的重复
(2)数据存放的文件名称不能重复
(3)所有涉及的transportConnectors 的端口
修改jetty.xml,主要就是修改端口
<property name=port value=8181/>

到bin下面,复制一个activemq
(1)修改程序的id,不能和前面的重复
ACTIVEMQ_PIDFILE=”$ACTIVEMQ_DATA/activemq2hostname.pid”
(2)修改配置文件路径
ACTIVEMQ_CONF=”$ACTIVEMQ_BASE/conf2”
(3)修改端口,里面有个tcp的61616的端口,要改成不一样的,最好跟activemq.xml里面的tcp的端口一致
(4)然后就可以执行了,如果执行没有权限的话,就授权:chmod 751 activemq2

ActiveMQ的网络链接

在某些场景下,需要多个ActiveMQ的Broker做集群,那么就涉及到Broker到Broker的通信,这个被称为ActiveMQ的networkConnector

ctiveMQ的networkConnector默认是单向的,一个Broker在一端发送消息,另一Broker在另一端接收消息。这就是所谓的“桥接”

ctiveMQ也支持双向链接,创建一个双向的通道对于两个 Broker,不仅发送消息而且也能从相同的通道来接收消息,通常作为duplex connector来映射

discovery(网络发现)

一般情况下,discovery是被用来发现远程的服务,客户端通常想去发现所有可利用的brokers
用两种网络发现的方式:静态网络发现 动态网络发现

Static networks

Static networkConnector是用于创建一个静态的配置对于网络中的多个Broker。这 种协议用于复合url,一个复合url包括多个url地址。格式如下: static:(uri1,uri2,uri3,…)?key=value

<networkConnectors>
<networkConnector name="local network"
uri="static://(tcp://remotehost1:61616,tcp://remotehost2:61616)"/> 
</networkConnectors>
Static networks可用属性

name:默认是bridge
dynamicOnly:默认是false,如果为true, 持久订阅被激活时才创建对应的网路持久订阅。默认是启动时激活
decreaseNetworkConsumerPriority:默认是false。设定消费者优先权,如果为true,网络的消费者优先级降低为-5。如果为false,则默认跟本地消费者一样为0
networkTTL :默认是1 ,网络中用于消息和订阅消费的broker数量
messageTTL :默认是1 ,网络中用于消息的broker数量
consumerTTL:默认是1 ,网络中用于消费的broker数量
conduitSubscriptions :默认true,是否把同一个broker的多个consumer当做一个来处理(重要,可能导致消费问题)
dynamicallyIncludedDestinations :默认为空,要包括的动态消息地址

<dynamicallyIncludedDestinations>
    <queue physicalName="include.test.foo"/>
    <topic physicalName="include.test.bar"/>
</dynamicallyIncludedDestinations>

staticallyIncludedDestinations :默认为空,要包括的静态消息地址

<staticallyIncludedDestinations>
    <queue physicalName="always.include.queue"/>
</staticallyIncludedDestinations>

excludedDestinations :默认为空,指定排除的地址

<networkConnectors>
<networkConnector uri="static://(tcp://localhost:61617)" name="bridge" dynamicOnly="false" conduitSubscriptions="true" decreaseNetworkConsumerPriority="false"> <excludedDestinations>
<queue physicalName="exclude.test.foo"/>
<topic physicalName="exclude.test.bar"/> </excludedDestinations>
<dynamicallyIncludedDestinations>
<queue physicalName="include.test.foo"/>
<topic physicalName="include.test.bar"/> </dynamicallyIncludedDestinations>
<staticallyIncludedDestinations>
<queue physicalName="always.include.queue"/> <topic physicalName="always.include.topic"/>
</staticallyIncludedDestinations> </networkConnector>
</networkConnectors>

duplex :默认false,设置是否能双向通信(重要)

suppressDuplicateQueueSubscriptions:默认false,如果为true, 重复的订阅关系一产生即被阻止

bridgeTempDestinations :默认true,是否广播advisory messages来创建临时destination

staticBridge :默认false,如果为true,只有staticallyIncludedDestinations中配置的destination可以被处理。

Static networks消息的丢失

有这样的场景,broker1和broker2通过networkConnector连接,一些consumers连接到broker1,
消费broker2上的消息。消息先被broker1从broker2上消费掉,然后转发给这些consumers。不幸的是转 发部分消息的时候broker1重启了,这些consumers发现broker1连接失败,通过failover连接到broker2 上去了,但是有一部分他们还没有消费的消息被broker2已经分发到了broker1上去了。这些消息,就好 像是消失了,除非有消费者重新连接到broker1上来消费。怎么办呢?

Static networks消息的丢失的解决方案

从5.6版起,在destinationPolicy上新增的选项replayWhenNoConsumers。这个选项使得broker1上有需要转发的消息但是没有消费者时,把消息回流到它原始broker。同时把enableAudit设置为false,为了防止消息回流后被当做重复消息而不被分发

<destinationPolicy>
    <policyMap>
          <policyEntries>
<policyEntry queue=">" enableAudit="false"> <networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/> </networkBridgeFilterFactory>
                     </policyEntry>
          </policyEntries>
    </policyMap>
</destinationPolicy>
集群的容错

前面讲述的都是Client配置链接到指定的broker上。但是,如果Broker的链接失败怎么办呢?此时,Client有两个选项:要么立刻死掉,要么去连接到其它的broker上。

Failover Protocol

Failover协议实现了自动重新链接的逻辑。这里有两种方式提供了稳定的brokers列表对于Client链接。第一种方式:提供一个static的可用的Brokers列表。第二种方式:提供一个dynamic 发现的可用Brokers。

Failover Protocol 的配置方式

failover:(uri1,...,uriN)?key=value 或者 failover:uri1,...,uriN
#Failover Protocol配置参数

initialReconnectDelay:在第一次尝试重连之前等待的时间长度(毫秒),默认10

maxReconnectDelay:最长重连的时间间隔(毫秒),默认30000

useExponentialBackOff:重连时间间隔是否以指数形式增长,默认true

backOffMultiplier:递增倍数,默认2.0

maxReconnectAttempts: 默认-1|0,自版本5.6起:-1为默认值,代表不限重试次数;0代表从不重试

startupMaxReconnectAttempts:初始化时的最大重连次数。一旦连接上,将使用maxReconnectAttempts 的配置,默认0

randomize:使用随机链接,以达到负载均衡的目的,默认true

backup:提前初始化一个未使用连接,以便进行快速失败转移,默认false

trackMessages:设置是否缓存[故障发生时]尚未传送完成的消息,当broker一旦重新连接成功,便将这些缓存中的消息刷新到新连接的代理中,使得消息可以在broker切换前后顺利传送,默认false

maxCacheSize:当trackMessages启用时,缓存的最大字节,默认为128*1024bytes

updateURIsSupported:设定是否可以动态修改broker uri(自版本5.4起),默认true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值