activemq网络桥接

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

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

图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的连接@ 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上的持久订阅者:
    http:// localhost:9161 / admin / subscribers.jsp
  16. 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上的日志文件输出
  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的统计信息的控制台:
    http:// localhost:8161 / admin / subscribers.jsp
  24. 这是显示关于Broker-3的统计信息的控制台:
    http:// localhost:10161 / admin / subscribers.jsp
  25. 如您所见,即使入队计数器显示为20,出队计数器也仅显示10,因为其他10条消息已由Broker-3丢弃。 这是一项有用的功能,有助于确保代理最多处理一次消息。

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

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来自一个代理。

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

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

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

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

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

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

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

activemq网络桥接

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

  1. activemq网络桥接_ActiveMQ –经纪人网络解释–第3部分

    activemq网络桥接 现在,我们已经在本博客系列的第1部分和第2 部分中了解了ActiveMQ网络连接器的基础,在第3部分中,我们将研究ActiveMQ如何平衡连接到代理网络的使用者. 介绍 当可 ...

  2. activemq网络桥接_ActiveMQ –经纪人网络解释–第4部分

    activemq网络桥接 在前面的第3部分中 ,我们已经看到ActiveMQ如何帮助将远程使用者与本地使用者区分开来,这有助于确定从消息生产者到使用者的较短路径. 在第4部分中,我们将研究如何在远程代 ...

  3. activemq网络桥接_ActiveMQ –经纪人网络解释

    activemq网络桥接 目的 这个由7部分组成的博客系列将分享有关如何创建ActiveMQ代理网络以实现高可用性和可伸缩性的信息. 为什么要建立经纪人网络? ActiveMQ消息代理是企业中消息传递 ...

  4. activemq网络桥接_ActiveMQ –经纪人网络解释–第2部分

    activemq网络桥接 在此博客中,我们将看到双工网络连接器如何工作. 在上一部分中,我们从broker-1和broker-2创建了一个网络连接器. 我们能够看到,当代理2上有一个使用者使用队列&q ...

  5. Linux——网络桥接

    什么是网络桥接? 在网络的使用中,有时需要搭建网络桥来实现网络桥接.例如在一台主机上制作一台虚拟机, 虚拟机是没有物理网卡的,这时虚拟机数据的发送和接收就需要通过主机上的物理网卡,需要主机 的内核来处 ...

  6. ActiveMQ –经纪人网络解释

    目的 这个由7部分组成的博客系列将分享有关如何创建ActiveMQ代理网络以实现高可用性和可伸缩性的信息. 为什么要建立经纪人网络? ActiveMQ消息代理是企业中消息传递基础结构的核心组件. 它需 ...

  7. ActiveMQ –经纪人网络解释–第4部分

    在前面的第3部分中 ,我们已经看到ActiveMQ如何帮助将远程使用者与本地使用者区分开来,这有助于确定从消息生产者到使用者的较短路径. 在第4部分中,我们将研究如何在远程代理上负载均衡并发使用者. ...

  8. ActiveMQ –经纪人网络解释–第5部分

    在前面的第4部分中,我们已经看到了如何使用网络连接器在队列中平衡远程使用者的负载. 在第5部分中,我们将看到如果在某个主题上有并发远程持久订阅者,则相同的配置将如何工作. 考虑以下配置-. 图1:经纪 ...

  9. ActiveMQ –经纪人网络解释–第3部分

    现在,我们已经在本博客系列的第1部分和第2 部分中了解了ActiveMQ网络连接器的基础,在第3部分中,我们将研究ActiveMQ如何平衡连接到代理网络的使用者. 介绍 当可以无序处理队列中的消息时通 ...

最新文章

  1. AI隐形衣:穿上这件连帽衫,监控算法对你“视而不见”
  2. 机器学习入门--进阶资料和流程建议
  3. Sql Server系列:视图
  4. JavaScript定义类的几种方式
  5. 你想入门Python,还是得看这篇文章
  6. Linux lsof命令使用小结
  7. 第二季-专题15-快车道DMA
  8. 纪念 C语言之父 丹尼斯·里奇 逝世10周年:他发明了计算机世界的钢筋水泥!...
  9. SheetJS中文文档-js导出Excel脚本库
  10. 脚本工具之下载M3U8文件类型的完整视频
  11. Ansys-结构动力学分析-有预应力琴弦横向振动模态分析学习收获
  12. 微机实验——十字路口交通灯控制器
  13. 需求分析师面试题案例_如何准备作为分析师的业务案例面试
  14. 安卓和苹果免填邀请码的功能怎么实现?
  15. android 8.0 耳机线控,最新资讯 | 安卓8.0这大变化没法忍!要弃耳机孔
  16. 菜鸟deepin安装Anaconda3教程
  17. 电脑计算机硬盘怎么新建,电脑如何新建一个本地磁盘
  18. PHP 实现中文分词搜索功能
  19. javascript百炼成仙 第一章 掌握JavaScript基础01 初入宗门
  20. 这有300+门刚刚开课的编程计算机科学免费课程大集合

热门文章

  1. codeforces773 D. Perishable Roads(思维+最短路)
  2. 【DP】【高精】WZK打雪仗(jzoj 1997)
  3. 初一模拟赛(4.20)
  4. 2019.01.22【NOIP普及组】模拟赛C组总结
  5. Wannafly 挑战赛27 题解
  6. 18、java中的泛型
  7. MySQL 大表优化方案(1)
  8. Java8使用 Optional 处理 null
  9. Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
  10. MyBatis中多表查询(N+1方式)