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

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

介绍

当可以无序处理队列中的消息时通常使用并发使用者,通常可以提高消息吞吐量。 ActiveMQ代理以循环方式在使用者之间调度消息,以便在并发使用者之间平衡消息消耗,除非将使用者指定为独占 。

让我们看下面的示例,其中三个使用者同时处理来自队列foo.bar的消息。 生产者排队60条消息,这些消息由三个消费者(每个20位)以循环方式处理。

并发消费者-新页面

在队列foo.bar上启动三个并发使用者

Ashwinis-MacBook-Pro:example akuntamukkala$ pwd
/Users/akuntamukkala/apache-activemq-5.8.0/example
Ashwinis-MacBook-Pro:example akuntamukkala$ ant consumer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar -DparallelThreads=3 -Dmax=20

产生60条消息

Ashwinis-MacBook-Pro:example akuntamukkala$ ant producer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar -Dmax=60

以下屏幕快照显示了3个使用者正在处理来自队列foo.bar的消息。 入队和出队60条消息。

broker-1-60msgs-concurrent-consumers

如下所示,每个使用者处理了20条消息。

经纪人-1-cc-60msgs

以下摘录自日志,显示消息被划分为三个使用者。

[Thread-3] Received: 'Message: 1 sent at: Tue Mar 04 13:46:53 IST 2014  ...' (length 1000)[Thread-2] Received: 'Message: 0 sent at: Tue Mar 04 13:46:53 IST 2014  ...' (length 1000)[Thread-1] Received: 'Message: 2 sent at: Tue Mar 04 13:46:53 IST 2014  ...' (length 1000)[Thread-3] Received: 'Message: 4 sent at: Tue Mar 04 13:46:53 IST 2014  ...' (length 1000)[Thread-2] Received: 'Message: 3 sent at: Tue Mar 04 13:46:53 IST 2014  ...' (length 1000)[Thread-1] Received: 'Message: 5 sent at: Tue Mar 04 13:46:53 IST 2014  ...' (length 1000)[Thread-3] Received: 'Message: 7 sent at: Tue Mar 04 13:46:53 IST 2014  ...' (length 1000)[Thread-2] Received: 'Message: 6 sent at: Tue Mar 04 13:46:53 IST 2014  ...' (length 1000)[Thread-1] Received: 'Message: 8 sent at: Tue Mar 04 13:46:53 IST 2014  ...' (length 1000)[Thread-3] Received: 'Message: 10 sent at: Tue Mar 04 13:46:53 IST 2014 ...' (length 1000)

现在,我们已经看到了并发消费者在单个经纪人上的工作方式,现在我们将研究当消费者跨经纪人网络分布时,它们如何工作。

本地与远程消费者

让我们借助下图所示的配置来探索ActiveMQ如何处理本地和远程使用者。

本地远程消费者

消费者1和消费者2分别使用来自Broker-1和Broker-2上的队列foo.bar的消息。 Broker-1建立了到Broker-2的网络连接器以转发队列消息。 生产者将消息放入Broker-1上的队列foo.bar中

让我们看看这个动作

  • 编辑Broker-1的配置/Users/akuntamukkala/apache-activemq-5.8.0/bridge-demo/broker-1/conf/activemq.xml并打开与Broker-2的网络连接器,然后重新启动Broker-1和Broker-2
<networkConnectors><networkConnectorname="T:broker1->broker2"uri="static:(tcp://localhost:61626)"duplex="false"decreaseNetworkConsumerPriority="false"networkTTL="2"dynamicOnly="true"><excludedDestinations><queue physicalName=">" /></excludedDestinations></networkConnector><networkConnectorname="Q:broker1->broker2"uri="static:(tcp://localhost:61626)"duplex="false"decreaseNetworkConsumerPriority="false"networkTTL="2"dynamicOnly="true"><excludedDestinations><topic physicalName=">" /></excludedDestinations></networkConnector></networkConnectors>
  • 启动本地消费者,消费者1
Ashwinis-MacBook-Pro:example akuntamukkala$ ant consumer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar
  • 启动远程使用者Consumer-2
Ashwinis-MacBook-Pro:example akuntamukkala$ ant consumer -Durl=tcp://localhost:61626 -Dtopic=false -Dsubject=foo.bar
  • 在Broker-1上启动生产者以排队100条消息
Ashwinis-MacBook-Pro:example akuntamukkala$ ant producer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar -Dmax=100

屏幕截图显示了Broker-1的队列:

经纪人-1-cc-100ed

让我们看一下消费者,看看消息是如何被分离出来的。

broker-1-localvsremote-equal

您可能会注意到,ActiveMQ代理将消息均匀地分派给本地使用者,而不是远程使用者,从而赋予它们相同的优先级。

远程使用者Consumer-2仅距离代理1跳,其距离配置的networkTTL值2少。

这会导致路由选择欠佳,尤其是在连接了经纪人时,使得生产者和消费者之间可能有多种路由。 为了确保生产者和消费者之间的最短路径,最好将其分发给本地消费者,而不是偏远的消费者。

ActiveMQ提供了一种使用该属性在本地使用者和远程使用者之间配置优先级的方法
网络连接器上的reductionNetworkConsumerPriority。

默认情况下,此值为false,因此将本地和远程代理视为相同。

如果我们在更改了reduceNetworkConsumerPriority =“ true”之后重复上述步骤,那么我们发现本地消费者Consumer-1的优先级高于远程消费者Consumer-2,即距离中间商1的路程。

broker-1-localvsremote
ActiveMQ可以智能地找出消息生产者和消费者之间的代理网络中的最短路径。

请阅读以下链接,以进一步了解ActiveMQ的最佳路由。

  • http://fusesource.com/docs/esb/4.3/amq_clustering/Networks-OptimizingRoutes.htm l

至此,本系列文章的第3部分结束了,我们看到了如何区分本地和远程使用者以帮助ActiveMQ确定消息产生者和使用者之间的最佳路径。

一如既往地欢迎您提出意见。

请继续关注第4部分,我们将讨论远程并发使用方的负载平衡…

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

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

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

相关文章

PJMEDIA之录音器的使用(capture sound to avi file)

为了熟悉pjmedia的相关函数以及使用方法&#xff0c;这里练习了官网上的一个录音器的例子。 核心函数&#xff1a; pj_status_t pjmedia_wav_writer_port_create(pj_pool_t * pool, const char * filename, unsigned clock_rate, unsigned channel_count, unsigned samples…

2007年暑期总结

又是一个没有回家的假期&#xff0c;一个月的鸡蛋炒拉面&#xff0c;一个月沉浸在编程的世界里……收获早已超越了技术本身&#xff0c;项目的实践&#xff0c;系统的架构&#xff0c;……更多的&#xff0c;是朋友们在一起的乐趣。A5闹鬼记&#xff0c;回去洗洗就睡了&#xf…

Linux下用户组、文件权限详解=------转载文

转载自-----原文地址&#xff1a; https://www.cnblogs.com/123-/p/4189072.html Linux下用户组、文件权限详解 用户组 在linux中的每个用户必须属于一个组&#xff0c;不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用…

风暴事件处理器–每个工作者的GC日志文件

在过去的三个月中&#xff0c;我正在与一个新团队合作&#xff0c;为电信领域的大数据分析构建产品。 Storm事件处理器是我们使用的主要框架之一&#xff0c;而且确实很棒。 您可以阅读其官方文档&#xff08;已改进&#xff09;中的更多详细信息。 Storm使用Workers来完成您…

JS实现逼真的雪花飘落特效

逼真的雪花飘落特效 效果图&#xff1a; 图片素材 &#xff1a; --> ParticleSmoke.png 代码如下&#xff0c;复制即可使用&#xff1a; <!doctype html> <html> <head> <meta charset"UTF-8"> <meta name"renderer" conte…

本地执行php查看内存占用,查看页面执行php占用内存情况

今天头脑一热&#xff0c;想看一下页面在执行的过程中占用了多少内存&#xff0c;我也不知道这样做的目的是什么&#xff0c;可能是出于我的惯性思维吧。不过这样做也不是完全没用&#xff0c;你可以清楚的知道哪些页面占用的内存比较多&#xff0c;特别是对于使用共用主机的网…

阴影及定位

阴影及定位 隐藏及阴影 标签隐藏 1、显示方式 display display: none; /*表示在页面中隐藏&#xff0c;并且不占位&#xff0c;但是重新显示出来又会占位*/ 2、透明度 opacity opacity: 0; /* 0 代表完全透明 1 代表完全显示 但是即使是透明了也会在页面中占位*/ /* 显示方式透…

ABAP--关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)

Stop 命令使用该命令的程序位置INITIALIZATION, AT SELECTION-SCREEN, START-OF-SELECTION和GET 事件中处理说明1、 当在INITIALIZATION事件执行该命令&#xff0c;系统将直接触发应用服务器和客户端屏幕元素的发送&#xff1b;2、 在其他事件中将直接触发END-OF-SELECTION事件…

[Code+#3]寻找车位

[Code#3]寻找车位 挺厉害的线段树题 m<n&#xff0c;所以n<2000,并且只有1000次修改询问&#xff0c;mqlogn的复杂度可以接受&#xff01; 求全局&#xff1f; 对行(n)建一个线段树。 线段树中维护的东西&#xff0c;一定可以包含所有“完全包含在”这个横条中的最大正方…

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

在此博客中&#xff0c;我们将看到双工网络连接器如何工作。 在上一部分中&#xff0c;我们从broker-1和broker-2创建了一个网络连接器。 我们能够看到当代理2上有一个使用者使用队列“ foo.bar”时&#xff0c;代理1上的队列“ foo.bar”的消息如何转发到代理2上的队列“ foo…

JQ实现情人节表白程序

JQ实现情人节表白页面 效果图&#xff1a; 表白利页&#xff0c;你值得拥有哦&#xff01; 代码如下&#xff0c;复制即可使用&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>JQ实现情人节表白程序<…

php 内部异步执行顺序,event_loop中不同异步操作的执行顺序

关于js的单线程、怎么创建一个异步任务都是老生常谈的话题了&#xff0c;我们今天就总结一下js不同的异步操作到底执行顺序如何。首先我们要明白js两种任务类型&#xff0c;一个是macrotask(宏任务)&#xff0c;一个是 microtask(微任务)。一个宏任务就是一个事件循环&#xff…

OpenGPU.org域名已经被劫持

这个域名被指向了上海黄浦区某地。 此时此刻&#xff0c;我的心情无比激动&#xff0c;“这年头&#xff0c;你要是不被‘墙’了&#xff0c;都不好意思出门”。 This domain name had been redirected to Shanghai, PRC. At this moment, I’m really excited that it’s my h…

Java 8日期时间API教程:LocalDateTime

该博文是Java 8中引入的有关Date Time API的系列教程的一部分。在本博文中&#xff0c;我将介绍LocalDateTime类中可用的一些方法。 LocalDateTime是一个不可更改的线程安全对象&#xff0c;它表示ISO-8601日历系统中没有时区的日期时间&#xff0c;例如2014-03-30T02&#xf…

消息队列使用的四种场景介绍(转)

消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题 实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ&#xff0c;RabbitMQ&#xff0c;ZeroMQ&#xff0c;Ka…

一步一步SharePoint 2007之三十一:实现文档Event Handler(3)——附加Handler程序

摘要  本篇文章将介绍实现文档Event Handler的第三部分——附加Handler程序。正文  下面将记录每一步的操作过程。  1、首先打开我的网站&#xff0c;依次点击Document Center、Documents&#xff0c;进入Documents列表页面。  2、在Documents列表界面中点击Settings&a…

oracle数据库swap占用率高,物理内存空余很多,swap被持续占用的问题

本帖最后由 wyanghu 于 2012-8-18 10:21 编辑这套生产环境跑在vmware esx虚拟机上&#xff0c;现在遇到的问题是&#xff1a;操作系统内存空余很大&#xff0c;但swap被持续占用&#xff0c;直到swap被占完&#xff0c;估计系统就崩溃了。下面是我的操作系统参数及oracle参数&a…

Day2 HTML基本标签元素

Day2 HTML基本标签元素 HTML: 超文本标记语言(HyperText Mark-up Language ) 1.作用&#xff1a;写网页结构    2.HTML不区分大小写&#xff0c;建议小写   3.文件后缀 .html 或者 .htm   4.html由浏览器解析执行. 由上往下&#xff0c;由左往右 1) HTML标…

C# 如何跨平台调用C++的函数指针!

函数指针搞C的人应该都知道&#xff0c;效率高&#xff0c;易用性强&#xff0c;隐蔽代码等。在C里面调用C写的dll的函数指针那是在容易不过了。使用C#就稍微麻烦点了&#xff01;那怎么掉呢&#xff1f;通过上面的第一篇文章我们知道应该使用委托 delegate。如果再高级点&…

Java hashCode() 和 equals()的若干问题解答

本章的内容主要解决下面几个问题&#xff1a; 1 equals() 的作用是什么&#xff1f; 2 equals() 与 的区别是什么&#xff1f; 3 hashCode() 的作用是什么&#xff1f; 4 hashCode() 和 equals() 之间有什么联系&#xff1f; https://www.cnblogs.com/skywang12345/p/3324958.…