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

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

在第4部分中,我们将研究如何在远程代理上负载均衡并发使用者。

让我们考虑一些高级配置,以平衡远程代理中队列上的并发消息使用者,如下所示。

part-4-lb-rcc-新页(4)
第四部分–经纪人网络

在以上配置中,我们有一个消息生成器,将消息发送到Broker-1上的队列moo.bar中。 Broker-1建立到Broker-2和Broker-3的网络连接器。 消费者C1使用来自代理2上队列moo.bar的消息,而消费者C2和C3是代理3上队列moo.bar上的并发消费者。

让我们看看这个动作

让我们创建三个经纪人实例…

  1. Ashwinis-MacBook-Pro:bin akuntamukkala $ pwd / Users / akuntamukkala / apache-activemq-5.8.0 / bin
  2. Ashwinis-MacBook-Pro:bin akuntamukkala $。/ activemq-admin创建../cluster/broker-1
  3. Ashwinis-MacBook-Pro:bin akuntamukkala $。/ activemq-admin创建../cluster/broker-2
  4. Ashwinis-MacBook-Pro:bin akuntamukkala $。/ activemq-admin创建../cluster/broker-3
  5. 通过修改相应的conf / activemq.xml和conf / jetty.xml来修复broker-2和broker-3传输,amqp连接器和jetty http端口,如下所示:
    经纪人 Openwire端口 码头HTTP端口 AMQP端口
    经纪人1 61616 8161 5672
    经纪人2 61626 9161 5682
    经纪人3 61636 10161 5692

  6. 修复broker-1上的网络连接器,以便可以将队列中的消息动态转发给broker-2和broker-3上的使用者。 可以通过将以下XML代码段添加到broker-1的conf / activemq.xml中来完成此操作
    <networkConnectors><networkConnectorname="Q:broker1->broker2"uri="static:(tcp://localhost:61626)"duplex="false"decreaseNetworkConsumerPriority="true"networkTTL="2"dynamicOnly="true"><excludedDestinations><topic physicalName=">" /></excludedDestinations></networkConnector>
    <networkConnectorname="Q:broker1->broker3"uri="static:(tcp://localhost:61636)"duplex="false"decreaseNetworkConsumerPriority="true"networkTTL="2"dynamicOnly="true"><excludedDestinations><topic physicalName=">" /></excludedDestinations></networkConnector></networkConnectors>
  7. 启动broker-2,broker-3和broker-1。 我们可以按任何顺序启动它们。
    1. /apache-activemq-5.8.0/cluster/broker-3/bin$ ./broker-3控制台
    2. /apache-activemq-5.8.0/cluster/broker-2/bin$ ./broker-2控制台
    3. /apache-activemq-5.8.0/cluster/broker-1/bin$ ./broker-1控制台
  8. 让我们在代理2上启动使用者C1,在代理3上启动消费者C2,在代理3上启动C3,但在称为“ moo.bar”的同一队列中
    1. /apache-activemq-5.8.0/example$ ant消费者-Durl = tcp:// localhost:61626 -Dsubject = moo.bar
    2. /apache-activemq-5.8.0/example$ ant消费者-Durl = tcp:// localhost:61636 -Dsubject = moo.bar -DparallelThreads = 2

      消费者订阅由Broker-2和Broker-3转发到其相邻的Broker-1,后者通过使用咨询消息将网络连接器同时建立到Broker-2和Broker-3。

  9. 让我们回顾一下代理Web控制台以查看队列和相应的使用者。
    1. 我们发现broker-2的Web控制台显示一个队列“ moo.bar”有1个使用者,broker-3的Web控制台显示一个队列“ moo.bar”有2个并发使用者
    2. 尽管有三个消费者(代理2上的C1和代理3上的C2,C3),但是代理1仅看到两个消费者(分别代表代理2和代理3)。

      part4-broker1-wc-cf
      http:// localhost:8161 / admin / queues.jsp


      part4-broker1-消费者

    3. 这是因为默认情况下,从broker-1到broker-2以及到broker-3的网络连接器都具有“ conduitSubscriptions”属性。
      由于哪个代理3的C2和C3消耗了来自同一队列“ moo.bar”的消息,因此在代理1中被视为一个使用方。

  10. 让我们将30条消息生成到broker-1的队列moo.bar中,并查看消息如何在使用者C1,C2和C3之间分配:
    part4-rcc-cSt
    显示消息如何从生产者传播到消费者C1,C2,C3

如上所示,即使有3个使用者和30条消息,但由于C2,C3订阅被合并到Broker-1的一个使用者中,因此每个人都无法处理10条消息。

如果我们要在主题上创建订户,则该管道将成为有用的设置,因为这样可以防止出现重复消息。 在第5部分中将对此进行更多介绍。

因此,为了使队列moo.bar上的C2和C3订阅传播到broker-1,让我们在broker-1的网络连接器配置中将conductorSubscriptions =“ false”设置为6之后,重新执行相同的步骤6、7、8、9和10。 conf / activemq.xml。

这是Broker-1的新网络连接器配置代码段:

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

重新启动代理和使用者C1,C2和C3并在Broker-1的moo.bar队列中产生30条消息后,我们发现所有三个使用者订阅都在Broker-1上可见。 结果,broker-1以循环方式向每个使用者分发了10条消息,以实现负载平衡。 如下图所示。

part4-broker-1-cc
显示消息如何从生产者传播到消费者C1,C2,C3


Broker-1的Web控制台@http:// localhost:8161 / admin / queueConsumers.jsp?JMSDestination = moo.bar显示,Broker-1现在可以看到3个使用者,并向每个使用者发送10条消息。

part4-broker-1

因此,在博客系列的第4部分中,我们已经了解了如何平衡正在使用队列中消息的远程并发使用者。

一如既往地感谢您的意见和反馈!

在第5部分中,我们将探讨如果我们使用主题而不是队列来播放相同的场景。 敬请关注…

资源资源

  • http://fusesource.com/docs/esb/4.3/amq_clustering/Networks-Connectors.html
  • 此博客中使用的所有代理的配置文件(activemq.xml和jetty.xml)在此处可用。

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

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

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

相关文章

总结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…

WEB框架研究笔记一(准备)

DELPHI框架基本完成之后&#xff0c;开发一个WEB框架的想法越来越强烈&#xff0c;一直以来没有过完整的开发过一个WEB项目&#xff0c;这几年来&#xff0c;也就看过几个WEB的产品&#xff0c;了解了一下Struts&#xff0c;去年研究了一下DORADO&#xff0c;顺便了解了SpringH…

备份文件夹

用到的API和数据结构&#xff1a; WINDOWS数据结构&#xff1a; WIN32_FIND_DATA WINDOWS API&#xff1a; FindFirstFile FindNextFile CompareFileTime CopyFIle DeleteFile View Code #include <windows.h> #include <iostream> #include <string> using…

面试整理(1):原生ajax

接到电话面试&#xff0c;有一些送分题答的不好&#xff0c;在这里整理一下 问题&#xff1a;原生ajax的工作流程是怎么样的&#xff1f; 老用封装好的工具&#xff0c;原生的ajax其实并不熟悉&#xff0c;今天复习一下。主要参考http://www.w3school.com.cn/ajax/ 要发一个…

QT

Qt软件 Qt是一个跨平台的C图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正地组件编程。 自从1996年早些时候&#xff0c;Qt进入商业领域&#xff0c;它已经成为全…

js获得页面鼠标位置

1.客户区坐标位置&#xff1a;clientX&#xff0c;clientY 鼠标相对于在当前页面可视范围左上角的位置 2.页面坐标位置&#xff1a;pageX,pageY 鼠标相对于页面左上角的位置&#xff08;受滑动等影响&#xff0c;例如pageYclientY scrollTop&#xff09; 3.屏幕坐标位置&#x…

针对新手的Java EE7和Maven项目–第7部分

从前面的部分恢复 第1 部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分 &#xff0c; 第4 部分 &#xff0c; 第5 部分 &#xff0c; 第6部分 在上一篇文章&#xff08;第6章&#xff09;中&#xff0c;我们发现了如何使用Arquillian和Wildfly 8.1进行单元测试JPA2域模型。…

具有Akka反应流的反应队列

反应性流是最近宣布的一项计划&#xff0c;旨在在JVM上为具有内置背压的异步流处理创建标准。 该工作组由Typesafe&#xff0c;Red Hat&#xff0c;Oracle&#xff0c;Netflix等公司组成。 早期的实验性实现之一是基于Akka的 。 预览版0.3包括演员生产者和消费者&#xff0c;这…

Django框架下报的版本问题

报错环境 python3.6.5&#xff0c;django2.2&#xff0c;PyMySQL0.9.3 …… django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3. 解决方法&#xff1a; Django连接MySQL时默认使用MySQLdb驱动&#xff0c;但MySQLdb不支持…

Gradle入门:简介

Gradle是一种构建工具&#xff0c;可以使用基于Groovy编程语言的内部DSL替换基于XML的构建脚本。 最近它吸引了很多关注&#xff0c;这就是为什么我决定仔细研究一下。 这篇博客文章是我的Gradle教程的第一部分&#xff0c;它有两个目标&#xff1a; 帮助我们安装Gradle 描…

首页回顾功能

公司要弄一个首页回顾的功能&#xff0c;可以查看以往某个时间的首页。程序每天自动在上午和下午分别抓取一个页面&#xff0c;生成地址为http://xxx.com/review/channel20090715am.html 的形式。 这个功能用到了jQuery UI 的 datepicker日历插件&#xff0c;但是主要的还是通过…

浏览器内核总结

一般来讲&#xff0c;浏览器分为外壳部分和渲染部分。外壳部分就是用户看得见摸得到的外观和操作界面;而渲染部分则包括了浏览器内核和JS引擎&#xff0c;其中JS引擎主要负责执行javascript语言实现网页上的动作&#xff0c;而内核则负责渲染网页&#xff0c;把数据变成用户可以…

mysql卸载重装总是卡在starting server这一选项

因为自己不小心把msyql给下载了&#xff0c;重装了一个5.7版本的可是在安装时卡在starting server这一部分&#xff0c;运行不下去。重写卸载重装仍然不成功&#xff0c;还是卡在starting server.无法继续下面的安装&#xff0c;查看日志也没有报错信息。 问题分析&#xff1a;…

箭头函数与普通函数的区别

箭头函数&#xff1a; let fun () > {console.log(lalalala); } 普通函数&#xff1a; function fun() {console.log(lalla); } 箭头函数相当于匿名函数&#xff0c;并且简化了函数定义。箭头函数有两种格式&#xff0c;一种只包含一个表达式&#xff0c;连{ ... }和return…