activeMQ的网络连接
两个Brokers是通过一个static的协议来网络链接的。一个consumer链接到brokerB的一个地址上,
当Producer 在brokerA以相同的地址发送消息时,此时他将转移到brokerB上,也就是brokerA的消息会
到BrokerB上
可以配置的属性
- name:默认为bridge
decreaseNetworkConsumerPriority:默认为false。设置消费者的优先权,
如果为true,网络的消费者优先级降低为-5.如果为false,默认和本地消费者一样为0
实际情况下,配置网络连接的brokerB能够消费更多的消息conduitSubScriptions: 默认true,是否将同一个broker的多个consumer当作一个处理
dynamicallyIncludedDestinations: 默认为空,要包括的动态消息地址。
<dynamicallyIncludeDestionations>
<queue physicalName="include.test.foo">
<dynamicallyIncludeDestionations>
staticallyIncludeDestionations:默认为空,要包括的静态消息地址.
<staticallyIncludeDestionations>
<queue physicalName="include.test.queue">
</staticallyIncludeDestionations>
excludedDestionations:默认为空,指定排除的地址
<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,设置是否为双向通信
静态网络链接出现的问题
又这样的场景,broker1 和 broker2通过networkConnector链接,一些consumers链接到broker1,
消费broker2的消息,消息先被broker1从broker2消费掉,然后转发给consumers.不幸的是转发消息的时候,broker1重启了,这些consumers发现broker1链接不上,通过failover链接到broker2,但是一部分消息还木有消费的消息已经分发到broker2上,这些消息,就好像消失啦一样,除非有消费者重新连接到broker1上消费。从5.6起,在destionationPolicy上新增的选项replyWhenNOConsumers。这个选项使得broker1傻姑娘有需要转发的消息但是木有消费者的时候,吧消息回流到原始的broker,同时吧enableAudit设置为false,未来防止消息回流后被当做重复消息儿不被分发。
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" enableAudit="false"> <networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/> </networkBridgeFilterFactory>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
容错的链接
如果consumer连接到broker,如果broker链接怎么办?此时,Clientyou两种选项,要么立刻死掉,要么连接到其他的broker上。
Failover(故障转移)协议实现啦自动重新链接的逻辑,有两种方式提供啦稳定的brokers列表对于Client链接。
1. 提供一个静态的可用的brokers列表
2. 提供一个dynamic发现的可用的broker列表
容错的配置
failover:(uri1,…,uriN)?key=value
容错的属性配置
- initialReconnectDelay:第一次尝试重新连接等待的毫秒时间
- maxReconnectDelay:最长的重新连接的时间间隔
- userExponentialBackOff:重新连接的时间间隔是否以指数形式增长
- maxReconnectionAttempts: 0为默认值,表示不限制重试次数
如果为大于0表示重试的次数 - randomize: 使用随机连接,以达到敷在均衡的目的,默认为true
- updateURIsSupported: 设定是否可以动态修改broker uri,默认为true