activemq网络桥接_ActiveMQ –经纪人网络解释–第3部分

activemq网络桥接

现在,我们已经在本博客系列的第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>
                <networkConnector
                        name="T:broker1->broker2"
                        uri="static:(tcp://localhost:61626)"
                        duplex="false"
                        decreaseNetworkConsumerPriority="false"
                        networkTTL="2"
                        dynamicOnly="true">
                        <excludedDestinations>
                                <queue physicalName=">" />
                        </excludedDestinations>
                </networkConnector>
                <networkConnector
                        name="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的最佳路由。

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

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

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

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

activemq网络桥接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值