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,一经查实,立即删除!

相关文章

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

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

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

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

阴影及定位

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

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实现情人节表白程序<…

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

消息队列中间件是分布式系统中重要的组件&#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…

Day2 HTML基本标签元素

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

作用域、执行环境、闭包(四)

本文也同步发表在我的公众号“我的天空” 上一期我们已经介绍了闭包&#xff0c;由于闭包可以延长函数内部的变量的生存周期&#xff0c;因此我们可以将不需要暴露在全局的变量封装成函数的内部变量&#xff0c;从而避免代码污染。 譬如要实现一个简单的累加器&#xff0c;为了…

php static_castunsigned int,C++ static_cast、dynamic_cast、const_cast和reinterpret_cast(四种类型转换运算符)...

上节讲到&#xff0c;隐式类型转换是安全的&#xff0c;显式类型转换是有风险的&#xff0c;C语言之所以增加强制类型转换的语法&#xff0c;就是为了强调风险&#xff0c;让程序员意识到自己在做什么。但是&#xff0c;这种强调风险的方式还是比较粗放&#xff0c;粒度比较大&…

AngularJS(九):路由

本文也同步发表在我的公众号“我的天空” AngularJS路由 AngularJS路由可以让我们通过不同的URL访问不同页面&#xff08;似乎是废话&#xff09;&#xff0c;其价值主要体现在单页面的web应用中&#xff08;single page web application&#xff0c;SPA&#xff09;&#xff0…

[C3W2] Structuring Machine Learning Projects - ML Strategy 2

第二周&#xff1a;机器学习策略&#xff08;2&#xff09;&#xff08;ML Strategy&#xff08;2&#xff09;&#xff09; 误差分析&#xff08;Carrying out error analysis&#xff09; 你好&#xff0c;欢迎回来&#xff0c;如果你希望让学习算法能够胜任人类能做的任务&a…

mysql语句执行顺序图示

转载于:https://www.cnblogs.com/whalesea/p/10382227.html

AngularJS(三):重复HTML元素、数据绑定

本文也同步发表在我的公众号“我的天空” 重复HTML元素 在前端的页面编写中&#xff0c;我们会经常遇到重复HTML元素&#xff0c;譬如绘制表格、菜单等&#xff0c;如以下代码显示一个简单的li列表&#xff1a; <body> <ul id"ul_cities"> </ul…

使用表中的数组数据类型

在这篇文章中&#xff0c;我想跟进我以前关于Oracle集合数据类型的文章 &#xff0c;并且我将集中精力使用af&#xff1a;table组件中的oracle.jbo.domain.Array属性。 因此&#xff0c;在我的数据库中&#xff0c;我具有以下SQL类型&#xff1a; create or replace type var…

linux 文件inode,linux文件系统-inode学习整理

linux文件系统-inode学习整理介绍linux文件系统可讲的模块有很多&#xff0c;包括文件系统整体架构、文件系统分类、虚拟文件系统以及文件系统存储结构等等&#xff0c;本文主要介绍的是文件系统的存储结构&#xff0c;也就是本文的重点-inode。文件存储结构首先从开天辟地开始…

pygame-KidsCanCode系列jumpy-part8-记录历史最高分

通常在多玩家的游戏中&#xff0c;每个玩家都会有自己的得分&#xff0c;最高分数会成为该游戏的最佳记录。这一篇&#xff0c;学习下如何记录最高得分&#xff1a;&#xff08;为了简化代码&#xff0c;本文采用文件方式&#xff0c;仅记录本机得分&#xff0c;明白原理后&…

linux下查看进度命令,在Linux系统中使用Coreutils Viewer显示命令运行进度

Coreutils Viewer(cv)是一个简单的程序&#xff0c;它可以用于显示任何核心组件命令(如&#xff1a;cp、mv、dd、tar、gzip、gunzip、cat、grep、fgrep、egrep、cut、sort、xz、exiting)的进度。它使用文件描述信息来确定一个命令的进度&#xff0c;比如cp命令。cv之美在于&…

[EffectiveC++]item34:区分接口继承和实现继承

[EffectiveC]item34&#xff1a;区分接口继承和实现继承 转载于:https://www.cnblogs.com/jeanschen/p/3363569.html

REST-framework快速构建API--四部曲

代码目录结构&#xff1a; 一、使用原生APIView 使用rest-framework原生的APIView实现过程&#xff1a; 以url(r^books/$, views.BookView.as_view(),name"books")为例进行流程分析&#xff0c; 1、views.BookView.as_view()>APIView的as_view方法>父类【View】…