activemq网络桥接_ActiveMQ –经纪人网络解释–第5部分

activemq网络桥接

在前面的第4部分中,我们已经看到了如何使用网络连接器在队列中平衡远程使用者的负载。

在第5部分中,如果主题上同时存在多个远程持久订阅者,我们将看到相同的配置如何工作。 考虑以下配置…。



part-5-lb-rcc-新页面
图1:经纪人网络–主题上的负载平衡订户


如上所示,我们有Broker-1,它启动了到Broker-2和Broker-3的两个网络连接器。 生产者将消息发送到Broker-1上的主题“ moo.bar”,而Broker-2具有订户C1,而Broker-3具有两个订户C2和C3,主题相同。

您可能会注意到,此设置与第4部分非常相似。 唯一的区别是,这里我们处理主题,而在第4部分中 ,我们处理队列。

让我们看看这个动作

  1. 在Broker-1的activemq.xml配置文件中添加以下网络连接器配置:
    <networkConnectors>
    <networkConnector
    name="T:broker1->broker2"
    uri="static:(tcp://localhost:61626)"
    duplex="false"
    decreaseNetworkConsumerPriority="false"
    networkTTL="2"
    conduitSubscriptions="false"
    dynamicOnly="true">
    <excludedDestinations>
    <queue physicalName=">" />
    </excludedDestinations>
    </networkConnector>
    <networkConnector
    name="T:broker1->broker3"
    uri="static:(tcp://localhost:61636)"
    duplex="false"
    decreaseNetworkConsumerPriority="false"
    networkTTL="2"
    conduitSubscriptions="false"
    dynamicOnly="true">
    <excludedDestinations>
    <queue physicalName=">" />
    </excludedDestinations>
    </networkConnector>
    </networkConnectors>
  2. 让我们按此顺序启动broker-2,broker-3和broker-1。
  3. akuntamukkala@localhost~/apache-activemq-5.8.0/cluster/broker-2/bin$ ./broker-2 console
  4. akuntamukkala@localhost~/apache-activemq-5.8.0/cluster/broker-3/bin$ ./broker-3 console
  5. akuntamukkala@localhost~/apache-activemq-5.8.0/cluster/broker-1/bin$ ./broker-1 console
  6. Broker-1的管理控制台连接表明,已经按照从Broker-1到Broker-2和Broker-3的配置分别建立了两个网络连接器:
  7. broker-1连接
    Broker-1的连接@ http:// localhost:8161 / admin / connections.jsp

  8. 让我们开始在Broker-2上订阅订户C1,订阅主题“ moo.bar”的消息,在Broker-3上订阅订户C2和C3,订阅主题相同的消息“ moo.bar”。
  9. 持久订阅者需要客户端ID和订阅者名称的唯一组合。 为了创建持久订户C2和C3,我们需要增强/Users/akuntamukkala/apache-activemq-5.8.0/example/src/ConsumerTool.java中提供的功能,其中/Users/akuntamukkala/apache-activemq-5.8 .0是ActiveMQ的安装目录。
  10. 修改后的代码包括编辑build.xml和ConsumerTool.java以添加新参数“ subscriberName”。 可以分别从此处此处获得已编辑的文件build.xml和ConsumerTool.java。
  11. 现在开始订户。
  12. akuntamukkala@localhost~/apache-activemq-5.8.0/example$ant consumer -Durl=tcp://localhost:61626 -Dtopic=true -Dsubject=moo.bar -DclientId=C1 -Ddurable=true -DsubscriberName=mb.C1 
  13. akuntamukkala@localhost~/apache-activemq-5.8.0/example$ant consumer -Durl=tcp://localhost:61636 -Dtopic=true -Dsubject=moo.bar -DclientId=C2 -Ddurable=true -DsubscriberName=mb.C2 
  14. akuntamukkala@localhost~/apache-activemq-5.8.0/example$ant consumer -Durl=tcp://localhost:61636 -Dtopic=true -Dsubject=moo.bar -DclientId=C3 -Ddurable=true -DsubscriberName=mb.C3 
  15. Broker-2上的持久订阅者:
    broker-2耐用订户
    http:// localhost:9161 / admin / subscribers.jsp

  16. Broker-3上的持久订阅者:
    broker-3-耐用订户
    http:// localhost:10161 / admin / subscribers.jsp

  17. Broker-1上的持久订户(由于网络连接器):
    http:// localhost:8161 / admin / subscribers.jsp

  18. 现在,让我们向Broker-1上的主题moo.bar发送10条持久消息。
  19. akuntamukkala@localhost~/apache-activemq-5.8.0/example$ant producer -Durl=tcp://localhost:61616 -Dtopic=true -Dsubject=moo.bar -Dmax=10 -Ddurable=true 
  20. 请参阅Broker-3上的控制台:
    broker-3-duplicate-msg-warning
    Broker-3上的日志文件输出

  21. 如您所见,Broker-3收到两次相同的消息,每个订阅C2和C3一次。 默认情况下,ActiveMQ不允许处理重复的消息。
  22. 发生这种情况是因为Broker-3上的订阅mb.C2和mb.C3都传播到了Broker-1。 因此,当10条消息发布到Broker-1上的moo.bar时,这些消息将发送到同一代理Broker-3上的订户mb.C2和mb.C3。 由于消息具有相同的ID,因此重复消息将被丢弃,因此警告将显示在日志消息中……(如步骤19所示)。
  23. 这是显示关于Broker-1的统计信息的控制台:
    broker-1-stats
    http:// localhost:8161 / admin / subscribers.jsp

  24. 这是显示关于Broker-3的统计信息的控制台:
    broker-3-stats
    http:// localhost:10161 / admin / subscribers.jsp

  25. 如您所见,即使入队计数器显示为20,出队计数器也仅显示10,因为其他10条消息已由Broker-3丢弃。 这是一项有用的功能,有助于确保代理最多处理一次消息。

发生这种情况的原因是,预订C2和C3都传播到上游代理Broker-1。

broker-3-duplicate-msg-warning1
Broker-3上的重复消息


让我们在网络连接器设置中进行一些细微调整来重试相同的场景,方法是将pipelineSubscriptions =“ true”
在两个网络连接器上分别从Broker-1到Broker-2和Broker-3。 重新启动代理后,删除不活动的持久订阅者,然后重复上述步骤。

<networkConnectors>
<networkConnector
name="T:broker1->broker2"
uri="static:(tcp://localhost:61626)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="true"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
<networkConnector
name="T:broker1->broker3"
uri="static:(tcp://localhost:61636)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="true"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
</networkConnectors>

下面的屏幕快照显示,Broker-1现在仅看到两个持久订阅者,每个Broker-1和Broker-3来自一个代理。

broker-1-cs-true
当conductorSubscriptions =“ true”时,Broker-1中的持久订户

在Broker-1上发布10条持久消息后,我们发现这次没有相同的重复消息问题。

正如预期的那样,所有10条消息均由C1,C2和C3处理,如下面的屏幕快照所示。

broker-1-msg处理
Broker-1的持久主题订阅者

broker-3-msg处理
Broker-3的持久主题订户C2和C3分别接收和处理10条消息


因此,我们已经看到了pipelineSubscriptions属性如何通过避免在代理网络中重复消息来帮助减少消息流量。

在第6部分中,我们将看到ActiveMQ如何提供“消息重播”功能,以防止消息阻塞的情况。

翻译自: https://www.javacodegeeks.com/2014/06/activemq-network-of-brokers-explained-part-5.html

activemq网络桥接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值