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

在前面的第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条消息


因此,我们已经了解了如何通过避免在代理网络中重复发送消息来帮助管道订阅属性来减少消息流量。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序: 域名配置

1. 问题 在小程序中&#xff0c;如果我们没有在微信公众平台: 配置 https开头的、备案过的域名话&#xff0c;调用该域名下的接口&#xff0c;就会报错 当然&#xff1a; 如果只是简单的学习下小程序使用的话&#xff0c;可以不校验域名 — 微信开发者工具中&#xff1a; 详情 …

C++迭代器简介

迭代器是一种检查容器内元素并遍历元素的数据类型。 标准库为每一种标准容器&#xff08;包括 vector&#xff09;定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法&#xff1a;所有的标准库容器都定义了相应的迭代器类型&#xff0c;而只有少数的容器支持下标…

硅谷企業面臨新的反壟斷枷鎖

硅谷的公司正面臨著加強反壟斷審查的新階段﹐這是對奧巴馬政府加強執法和持續不斷的海外壓力所做出的反應。 對在其行業中佔據主導地位的企業採取更嚴格的立場可能會考驗這些科技業巨頭在布什政府時期採取的政府關係策略。Associated Press奧巴馬政府任命的司法部負責反壟斷執法…

Spring Java配置:会话超时

当您可以使用基于Java的配置开发Spring应用程序时&#xff0c;我们生活在一个美好的时光。 不再有多余的XML代码&#xff0c;只有纯Java代码。 在本文中&#xff0c;我想讨论一个关于Spring应用程序中会话管理的热门话题。 更确切地说&#xff0c;我将以Java配置样式讨论会话超…

分而治之思想

当一个问题的规模很大时&#xff0c;直接求解往往比较困难。对于这类问题&#xff0c;很大一部分是可以采取分而治之的思想来处理的。 分治法是把问题划分成多个子问题来进行处理。这些子问题&#xff0c;在结构上跟原来的问题一样&#xff0c;但是规模比原来的问题要小。如果得…

诡异的DateTime.TryParseExact方法

老赵在介绍Routing扩展的WebCast中出了点“小状况”&#xff0c;即将DateTime.ToString(“yyyy-MM-dd”)修改为DateTime.ToString(“yyyy/MM/dd”)后&#xff0c;页面中仍然显示为yyyy-MM-dd样式的日期格式。相信看过WebCast的同学都还记得吧。我不解&#xff0c;将老赵代码中D…

iSlide——图标库、图示库的用法

iSlide中&#xff0c;有一个“图示库”功能&#xff0c;主要功能是同时排列多块文字或多张图片。单击插图库&#xff0c;会弹出一个新的对话框。从中&#xff0c;可以选择权限、分类、数量数据和样式&#xff0c;也可以直接搜索。 下面就举一个例子&#xff1a;我要开一个班队会…

查看系统剩余空间

1.剩余空间&#xff1a;df -h 2.追踪最耗费硬盘的文件位置 cd /du -h --max-depth1 | sort -rn 转载于:https://www.cnblogs.com/xiaobiaomei/p/10669159.html

『ExtJS』01 001. ExtJS 4 类的定义

ExtJS 4 类的定义类的定义与类方法的调用 样例代码// Define new class Vehicle under the Cookbook namespaceExt.define(Cookbook.Vehicle, {// class configuration goes hereManufacturer : Aston Martin,Model : Vanquish,getDetails : function() {alert(I am an this…

使用C#調用外部程式或是執行DOS命令

在.NET裡要如何調用外部程式呢?? 在.net裡&#xff0c;提供了Process類&#xff0c;提供我們強大的調用外部工具功能&#xff0c;並透過重新導向輸入與輸出&#xff0c;可以取得執行結果&#xff0c;下面就用一個例子來示範在一個WinForm裡輸入一個Dos命令&#xff0c;然後呼…

SQLiteOpenHelper+ContentProvider的使用

效果图&#xff1a; PetDbHelper package com.example.admin.pets;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import com.example.admin.pets.PetContract.PetEntry;public class PetDb…

[Mac入门] 如果更快的打开程序或文件

今天有位网友问我在Windows下可以用CtrlR快速打开程序/文件夹等&#xff0c;在Mac下有没有相类似的功能&#xff1f;本文将介绍一些我的一般做法。 1.Windows下的CtrlR是什么&#xff1f; 我打算从解释CtrlR开始说起&#xff0c;希望朋友们别嫌烦&#xff5e;。Windows下系统全…

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

在前面的第3部分中 &#xff0c;我们已经看到ActiveMQ如何帮助将远程使用者与本地使用者区分开来&#xff0c;这有助于确定从消息生产者到使用者的较短路径。 在第4部分中&#xff0c;我们将研究如何在远程代理上负载均衡并发使用者。 让我们考虑一些高级配置&#xff0c;以平…

总结CSS3新特性(选择器篇)

CSS3新增了嗯- -21个选择器,脚本通过控制台在这里运行; ~: p ~ p {color : red;/*此条规则将用于p后边所有的p...就是除了第一个p的所有p,规则同p:not(:nth-of-type(1)),但是权重要低于后者*/} [attribute^value]: 选择该属性以特定值开头的元素 [attribute$value]: 选择该属…

工作流的设计,业务流程图的绘制与编辑,工作流软件,工作流源代码组件库,开发平台,开发引擎...

基于业务流程的工作流系统在当前的软件工业中占据着非常重要的部分&#xff0c;开发此类系统, 最困难的部分就是业务流程建模和电子表单的可视化界面部分,这部分界面要求有快速的响应时间, 完善的逻辑关系,以及根据需求不断变化而必须具备的灵活编辑功能. E-Form可视化图形源码…

Ajax全接触(1)

Ajax全称&#xff1a;Asynchronous JavaScript and XML(异步的JavaScript和XML) .Ajax不是某种编程语言 是一种在无需重新加载整个网页的情况之下能够更新部分网页的技术。 后面引入XMLHttpRequest对象用于后台和服务器交换数据&#xff0c;可以在不重新加载整个页面的前提下…

关于hibernate字段映射@colunm出现的问题以及jpa驼峰大写转_小写的问题探究

关于hibernate字段映射colunm出现的问题以及jpa驼峰大写转_小写的问题探究2018年04月24日 15:47:26 守望dfdfdf 阅读数&#xff1a;735 标签&#xff1a; colunmhibernate表映射实体类 更多个人分类&#xff1a; 工作 问题编辑版权声明&#xff1a;本文为博主原创文章&#xff…

LeetCode 上最难的链表算法题,没有之一!

题目来源于 LeetCode 第 23 号问题&#xff1a;合并 K 个排序链表。 该题在 LeetCode 官网上有关于链表的问题中标注为最难的一道题目&#xff1a;难度为 Hard &#xff0c;通过率在链表 Hard 级别目前最低。 题目描述 合并 k 个排序链表&#xff0c;返回合并后的排序链表。请分…

处理Akka应用程序中的每个事件

这里的事件&#xff0c;那里的事件&#xff0c;到处都是事件。 发布有关检查每一项Akka事件最终都能找到归宿的信息。 Akka和基于事件的反应式应用程序是创建软件的新方法。 在当前基于Scala的项目中&#xff0c;我们非常密集地使用Akka。 事件非常适合我们的用例&#xff0c;…

使用IntelliJ ..达2周,到目前为止一切正常

几乎已经过去了2个星期&#xff0c;我已经完全切换到IntelliJ作为我在家里和工作中的主要Java IDE。 到目前为止一切顺利&#xff0c;这是我的初步发现。 迁移 &#xff1a;我花了几个小时来迁移项目。 最终&#xff0c;如果您的项目已经Mavenized&#xff0c;事情就简单了&am…