ActiveMQ –经纪人网络解释

目的

这个由7部分组成的博客系列将分享有关如何创建ActiveMQ代理网络以实现高可用性和可伸缩性的信息。

为什么要建立经纪人网络?

ActiveMQ消息代理是企业中消息传递基础结构的核心组件。 它需要高度可用并且可以动态伸缩,以促进具有不同容量需求的动态异构分布式应用程序之间的通信。

如今,在商用硬件上扩展企业应用程序已成为当务之急。 ActiveMQ通过能够创建代理网络来分担负载而很好地满足了这一要求。

很多时候,跨地理分布的数据中心运行的应用程序需要协调消息。 使用代理网络可以更好地设计跨地理区域/数据中心的运行消息生产者和消费者。

ActiveMQ使用传输连接器,通过它与消息生产者和使用者进行通信。 但是,为了促进代理之间的通信,ActiveMQ使用网络连接器

网络连接器是两个代理之间的桥梁,允许按需转发消息。

换句话说,如果代理B1启动到代理B2的网络连接器,则如果B2上至少有一个消费者使用同一通道,则B1上的通道(队列/主题)上的消息将转发到B2。 如果将网络连接器配置为双工,则消息将按需从B2转发到B1。

这非常有趣,因为经纪人现在可以彼此动态通信。

在这个由7部分组成的博客系列中,我们将研究以下主题,以了解这一非常强大的ActiveMQ功能:

    1. 网络连接器基础知识–第1部分
    2. 双工网络连接器–第2部分
    3. 在本地/远程代理上平衡消费者的负载–第3部分
    4. 平衡远程代理上的使用者/订户的负载
      1. 队列:负载均衡远程并发使用者–第4部分
      2. 主题:远程代理上的负载均衡持久订阅–第5部分
    5. 存储/转发消息和使用者故障转移–第6部分
      1. 如何防止邮件阻塞
    6. 虚拟目的地–第7部分

为了表示应有的信誉,以下URL帮助我创建了此博客文章系列。

  1. ActiveMQ的高级消息功能,由Dejan Bosanac撰写 [幻灯片32-36]
  2. Jakub Korab的 理解ActiveMQ Broker网络

先决条件

  1. ActiveMQ 5.8.0 –创建代理实例
  2. Apache Ant –运行ActiveMQ示例生产者和使用者进行演示。

为了便于演示,我们将在同一台计算机上使用多个ActiveMQ代理实例。

网络连接器基础知识–第1部分

下图显示了网络连接器的功能。 它桥接两个代理,并且如果由Broker-1建立消息,则根据需要将消息从Broker-1转发给Broker-2。

数控

网络连接器可以是双工的,因此可以沿相反的方向转发消息。 从Broker-2到Broker-1,一旦Broker-1上存在某个使用者,并且该使用者存在于Broker-2中。 第2部分中的更多内容

在Broker-1和Broker-2之间设置网络连接器

  • 创建两个代理实例,例如broker-1和broker-2
Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd
/Users/akuntamukkala/apache-activemq-5.8.0/bin
Ashwinis-MacBook-Pro:bin akuntamukkala$ ./activemq-admin create ../bridge-demo/broker-1
Ashwinis-MacBook-Pro:bin akuntamukkala$ ./activemq-admin create ../bridge-demo/broker-2

由于我们将在同一台计算机上运行两个代理,因此我们将broker-2配置为没有端口冲突。

  • 编辑
    /Users/akuntamukkala/apache-activemq-5.8.0/bridge-demo/broker-2/conf/activemq.xml
    1. 将传输连接器从61616更改为61626
    2. 将AMQP端口从5672更改为6672(此博客不使用它)
  • 编辑
    /Users/akuntamukkala/apache-activemq-5.8.0/bridge-demo/broker-2/conf/jetty.xml
    1. 将Web控制台端口从8161更改为9161
  • 配置从Broker-1到Broker-2的网络连接器
    将以下XML代码段添加到
    /Users/akuntamukkala/apache-activemq-5.8.0/bridge-demo/broker-1/conf/activemq.xml
networkConnectors><networkConnector name="T:broker1->broker2" uri="static:(tcp://localhost:61626)" duplex="false" decreaseNetworkConsumerPriority="true" networkTTL="2" dynamicOnly="true"><excludedDestinations><queue physicalName=">" /></excludedDestinations></networkConnector><networkConnector name="Q:broker1->broker2" uri="static:(tcp://localhost:61626)" duplex="false" decreaseNetworkConsumerPriority="true" networkTTL="2" dynamicOnly="true"><excludedDestinations><topic physicalName=">" /></excludedDestinations></networkConnector></networkConnectors>

上面的XML代码片段配置了两个网络连接器“ T:broker1-> broker2”(仅队列中的主题除外)和“ Q:broker1-> broker2”(仅队列中的主题除外)。 这样可以很好地分隔用于主题和队列的网络连接器。

尽管我更愿意指定[type]:-> [destination broker],但名称可以是任意的。

URI属性指定如何连接到broker-2

  • 启动经纪人2
Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd
/Users/akuntamukkala/apache-activemq-5.8.0/bridge-demo/broker-2/bin
Ashwinis-MacBook-Pro:bin akuntamukkala$ ./broker-2 console
  • 开始经纪人1
Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd
/Users/akuntamukkala/apache-activemq-5.8.0/bridge-demo/broker-1/bin
Ashwinis-MacBook-Pro:bin akuntamukkala$ ./broker-1 console

在broker-1上的日志显示与broker-2建立了2个网络连接器

INFO | Establishing network connection from vm://broker-1?async=false&network=true to tcp://localhost:61626INFO | Connector vm://broker-1 StartedINFO | Establishing network connection from vm://broker-1?async=false&network=true to tcp://localhost:61626INFO | Network connection between vm://broker-1#24 and tcp://localhost/127.0.0.1:61626@52132(broker-2) has been established.INFO | Network connection between vm://broker-1#26 and tcp://localhost/127.0.0.1:61626@52133(broker-2) has been established.

broker-1上的Web控制台@ http:// localhost:8161 / admin / connections.jsp显示了已建立到broker-2的两个网络连接器

经纪人1-NC

broker-2上的相同内容未显示任何网络连接器,因为broker-2没有启动任何网络连接器

让我们看看这个动作

让我们在broker-1的名为“ foo.bar”的队列上产生100条持久消息。

Ashwinis-MacBook-Pro:example akuntamukkala$ pwd
/Users/akuntamukkala/apache-activemq-5.8.0/example
Ashwinis-MacBook-Pro:example akuntamukkala$ ant producer -Durl=tcp://localhost:61616 -Dtopic=false -Ddurable=true -Dsubject=foo.bar -Dmax=100

broker-1 Web控制台显示已将100条消息放入队列“ foo.bar”

http:// localhost:8161 / admin / queues.jsp

broker-1-100msgs生产

让我们在Broker-2上的“ foo.bar”队列上启动一个使用者。 这里要注意的重要一点是目标名称“ foo.bar”应该完全匹配。

Ashwinis-MacBook-Pro:example akuntamukkala$ ant consumer -Durl=tcp://localhost:61626 -Dtopic=false -Dsubject=foo.bar

我们发现,来自broker-1的foo.bar队列的所有100条消息都被转发到broker-2的foo.bar队列使用方。

位于http:// localhost:8161 / admin / queues.jsp的broker-1管理控制台

broker-1-100msgs已用

broker-2管理控制台@ http:// localhost:9161 / admin / queues.jsp显示,我们启动的使用者已经使用了从Broker-1按需转发的所有100条消息

broker-2-出队

foo.bar队列上的broker-2消费者详细信息

经纪人-2消费者细节

broker-1管理控制台显示所有100条消息都已出队[已通过网络连接器转发到broker-2]。

broker-1-nc队列消费者

“ foo.bar”队列上的broker-1使用者详细信息显示该使用者是按需创建的:[连接器名称] _ [目标代理] _inbound_

broker-1-nc消费者详细信息

因此,我们已经了解了ActiveMQ中网络连接器的基础。

请继续关注第2部分…

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

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

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

相关文章

13 创建高级联结

13.1 使用表别名 在之前的例子中&#xff0c;我们用的都是用的列别名&#xff0c;SQL还允许给表名起别名。 13.2 使用不同类型的联结 我们在上一章使用的只是称为内部联结或等值联结&#xff08; equijoin&#xff09; 的简单联结&#xff0c;现在来看3种其他联结&#xff0c;…

JS中undefined和null的区别,以及出现原因

区别&#xff1a;null是一个表示无的对象&#xff0c;转换为数值为0&#xff1b; undefined表示一个无的原始值&#xff0c;转化为数值为NAN&#xff08;与任何数字相加也为NAN&#xff09; undefined出现原因&#xff1a;(口诀&#xff1a;一变量二函数一对象) 1.变量被声明了…

判断一个数是不是质数

number int(input("请输入数字&#xff1a;"))count 2while count < number -1: if number % count 0: #质数是除了1和它本身能除尽。将这个数从2开始除&#xff0c;除到number-1&#xff0c;如果有除尽的就不是质数&#xff0c;如果没有就是质数。…

Java 8:功能接口示例

为了支持Java 8中的lambda表达式&#xff0c;他们引入了Functional Interfaces。 具有单一抽象方法的接口可以称为功能接口。 Runnable&#xff0c;Comparator&#xff0c;Cloneable是功能接口的一些示例。 我们可以使用Lambda表达式实现这些功能接口。 例如&#xff1a; Th…

正则表达式验证问题(用户名、密码、email、身份证

实现的代码如下&#xff1a; 1 <html>2 <head>3 <meta charset"UTF-8">4 </head>5 <body>6 <p>用户名正则表达式 &#xff0c;4到16位&#xff08;字母&#xff0c;数字&#xff0c;下滑线&#xff0c;减号&#xff09;</p&g…

MySQL协议分析(1)

MySQL协议分析 此阶段的协议分析是在未压缩未加密情况下的协议分析 思路&#xff1a; 结合Oracle官网和自己用wireshark抓的网络数据包进行协议分析 官网说明 mysql包共分为4段&#xff0c;格式如下&#xff1a; 第一段&#xff1a;payload&#xff08;通常是执行的SQL语句&…

linux raw socket 例子,raw socket编程例子

raw socket编程例子内容安排:1.原始套接字介绍1.1 原始套接字工作原理与规则1.2 简单应用2 FTP密码窃取器实现(简单的rootkit)2.1 设计思路2.2 实现2.3 不足与改进之处开始,嗯,喝口茶水先...........1.原始套接字(raw socket)1.1 原始套接字工作原理与规则原始套接字是一个特殊…

谨慎使用Hibernate中的本机SQL

我真的很喜欢Hibernate&#xff0c;但我也不知道同时具备强大功能和欺骗性的工具。 我可以写一本书&#xff0c;讲述仅与Hibernate相关的生产和货物崇拜编程中的意外情况。 与用户相比&#xff0c;与工具相比&#xff0c;这更多的是问题&#xff0c;但请不要让它过于保修。 所…

js 编辑数组

删除数组第一个元素使用var length arr.shift(); 删除arr的第一个元素后, 返回值是删除后的数组长度 删除数组最后一个元素使用var length arr.pop(); 删除arr的最后一个元素后, 返回值是删除后数组的长度 在数组开头添加元素使用var length arr.unshif…

tensorboard运行

终端中进入存放even文件的文件夹的上一步&#xff0c;然后&#xff0c;输入tensorboard --logdir存放even文件的文件夹 转载于:https://www.cnblogs.com/wzwi/p/10931397.html

DevExpress WPF v18.2新版亮点(五)

买 DevExpress Universal Subscription 免费赠 万元汉化资源包1套&#xff01; 限量15套&#xff01;先到先得&#xff0c;送完即止&#xff01;立即抢购>> 行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布&#xff0c;本站将以连载的形式…

JavaFX技巧3:使用回调接口

作为UI框架开发人员&#xff0c;提供自定义控件外观和行为的方法是我工作的一部分。 在许多情况下&#xff0c;这是通过允许框架用户在控件上注册工厂来完成的。 过去&#xff0c;我会为此创建一个工厂接口&#xff0c;并在框架内提供一个或多个默认实现。 这些事情在JavaFX中…

爱课程c语言函数2的作业答案,C语言程序设计

Q&#xff1a;本门课程面向的授课群体是什么&#xff1f;没有任何基础能学习本课程吗&#xff1f;A&#xff1a;本门课程的基本内容是面向零基础的学生。进阶内容是面向有一定编程基础或者大学计算机基础的学生&#xff0c;但是进阶内容不做为课程考试内容。Q&#xff1a;本课程…

旧文章搬运完毕

花了一天时间&#xff0c;把原来百度空间里200多篇文章里的70篇重要文章&#xff08;除去扯淡的&#xff09;搬了出来。 希望这些资料对初学者能够有点用&#xff0c;以后有时间还是继续多写一些有用的内容出来。转载于:https://www.cnblogs.com/achillis/p/10183787.html

voinc vue实现级联选择

需求&#xff1a; vonic中实现级联选择 <!DOCTYPE html> <html> <head><title>下拉框</title><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><link rel…

爬虫521错误(又是一次和可爱的前端vs的故事)

起因: 今天突然想重构一下代理池,并且想扩充一下代理,所以就想着爬点代理IP,然后就有了下面的故事 一上来先进行了一顿操作: def get_xxdaili(url):headers {User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safar…

c语言编译器怎样退出全屏,BOOX 应用软件怎样退出全屏模式?

​相信很多用BOOX阅读器的小伙伴都知道BOOX的系统是安卓系统&#xff0c;相对于Kindle的原生Linux系统&#xff0c;BOOX的安卓系统的开放性会更强&#xff0c;可以自由下载一些第三方应用软件。天弟知道很多小伙伴们喜欢在一些第三方应用软件上面看书的习惯&#xff0c;比如像多…

Java 8 Friday:不再需要ORM

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

Pwn相关工具安装

$apt-get update $apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential $pip install --upgrade pip $sudo pip install pwntools sudo apt-get install nasm,gcc,gdb,binutils,hexedit #32位libc库 sudo apt-get install lib…

c 语言输出指针的值,C 语言指针

C 语言指针在本教程中&#xff0c;您将学习指针。什么是指针&#xff0c;如何使用它们以及在示例的帮助下使用它们时可能遇到的常见错误。指针是 C和C 编程的强大功能。在学习指针之前&#xff0c;让我们学习一下C语言编程中的地址。C 语言地址如果程序中有变量var&#xff0c…