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;…

正则表达式验证问题(用户名、密码、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…

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

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

爬虫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新功能&#…

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

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

Java EE CDI限定词:快速浏览

在上下文和依赖注入&#xff08;CDI&#xff09;中&#xff0c; 限定符是类型安全和松散耦合的主体。 为什么&#xff1f; 没有CDI&#xff0c;我们将以类似于下面的方式注入Java EE组件 注意&#xff1a;这实际上不会编译&#xff0c;只是假设的代码片段 例子1 例子2 上述…

Windows 系统光盘刻录教程-光盘怎样刻录?刻录数据光盘用轨道一次写入还是光盘一次写入?...

刻录光盘需要 DVD-RW 的光驱&#xff0c;并且光盘需要 DVD-R 的光盘用于刻录。刻录工具可以使用 https://cn.ultraiso.net/ 来进行刻录。选择软件目录 中 工具 &#xff0c;选择 刻录光盘映像 即可进行配置&#xff1a; 此时涉及到了光盘写入的方式的选择问题&#xff0c;在网上…

NTC3950-10K温度传感器

一、计算公式 补充&#xff1a; B3950 R10K T225度 查RT表&#xff0c;25度对应的是10K 电路&#xff1a;   热敏电阻与上拉电阻R813分压&#xff0c;获取温度与Vo电压的关系&#xff0c;在根据Vo折算出与MCU ADC的数值。 再将ADC代出Rt&#xff0c;即得到ADC与T的关系公式。…

二分搜索树的基本实现

基本操作的动画演示 插入&#xff08;略&#xff09; 搜索&#xff08;略&#xff09; 删除节点 代码 package com.yunche.datastructure;import java.util.LinkedList; import java.util.Queue;/*** ClassName: BST* Description: 二叉搜索树&#xff1a;每个节点的左子树的值…

d9900 修改ip 思科dcm_思科设备SSH登陆详细配置过程

思科设备SSH登陆详细配置过程我们用GNS3进行拓扑搭建。实验拓扑图如下&#xff1a;进行完基本配置之后开始配置SSH服务器(R2)1.首先验证设备是否支持SSHR2#show ip ssh能够识别这条命令就说明支持。2.配置IP域名。使用config# ip domain-name domain-name全局配置模式命令配置网…

java 把string转为keyevent_盘点现在Java强大第三方库(字符串操作),程序员都该知道!...

1.字符串与集合间的转化引用第三方库 Apache Commons Lang jre连接值得一提的自JDK1.8以后字符串集合转为字符串可以使用String类下的join()方法,但别的数据类型还是要依靠第三方库--对比JDK和第三库代码如下我自己是一名从事了多年开发的java老程序员&#xff0c;这段时间整理…

Redis安装文档

1.前置条件 前置条件&#xff1a;linux已经可以上网&#xff0c;参考&#xff1a;https://www.cnblogs.com/ZenoLiang/p/10201875.html 2.安装redis 2.1依赖包检查 1. yum install cpp -y 2. yum install binutils -y 3. yum install glibc-kernheaders -y 4. yum install…

我用Mono(1)

我在Mono 0.1就开始关注和试用Mono了。我印象最深的一次是&#xff0c;我在FreeBSD里编译好了Mono&#xff08;FreeBSD装在VPC里&#xff09;。我用了同样的算法写了一个CS文件和JAVA文件。然后在虚拟机的FreeBSD的Mono下编译运行&#xff0c;把Java文件在真实机器的Windows XP…

Java基本数据类型的传值

传递值&#xff1a; 说明&#xff1a;标题其实说法是错误的。Java中只有值传递&#xff0c;没有引用传递。 ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x x *2; } ... ... //调用该函数 int num 5; System.out.println(num); change…

红楼梦人物分析系统c语言,Gephi分析红楼梦

前言上一周赶了好久的社会网络计算&#xff0c;貌似是第四周还是第五周的时候&#xff0c;那时候我们就把题目定下来了吧&#xff0c;然后一直拖着没有做。其中的原因多种多样 &#xff0c;其实也可以说没有什么原因&#xff0c;就是不想做而已&#xff0c;然后就假装忘记23333…

二、MyBatis-HelloWorld

环境准备 1.创建数据库表 create table tbl_employee (id int(11) primary key AUTO_INCREMENT comment "ID",last_name varchar(20) default null comment "姓名",email varchar(20) default null comment "邮件",gender varchar(1) default nu…

洪水同频率放大的方法_我们应该怎么选择放大器配件?

在市面上&#xff0c;手机信号放大器高达百种型号与品牌&#xff0c;每种手机信号放大器所需的配件也不相同&#xff0c;我们需要选择合适的配件&#xff0c;才能让手机信号放大器更稳定的运行。下面佛山红岸谷通讯教大家怎么选适合自己的手机信号放大器配件。主要有以下几点。…

斑能不能彻底去掉_用茶树精油祛痘时,千万不能做这5件事!!!

祛痘注意事项~用茶树精油祛痘时&#xff0c;千万不能做这5件事&#xff01;&#xff01;&#xff01;长痘痘虽然是令人很头疼的事&#xff0c;但是茶树精油祛痘、去痘印功效可谓是无敌的&#xff01;茶树精油是自然界中的抗菌大师&#xff0c;能净化皮肤、平衡皮肤油脂分泌&…