2016年1月28日星期四

ActiveMQ_006:Network Connector 配置参数duplex的含义(摘录+整理)

1. 部署拓扑图
Broker-1的端口是61616,Broker-2的端口是61626。

2. Broker-1的activemq.xml的networkConnectors配置片段如下:

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

配置表明,发送到Broker-1上的所有的Queue和Topic的消息,都会转发到Broker-2上。
反之则不然,即发送到Broker-2上的所有的Queue和Topic的消息,不会转发到Broker-1上。
原因是这里设置 duplex="false"。

3. 先启动Broker-2,再启动Broker-1
在Broker-1的Console上可以看到从Broker-1到Broker-2的Network Connectors 已经建立。

4. 启动Producer,发送100条消息到Broker-1
在Broker-1的Console上可以看到100条消息已经入Queue:foo.bar,但是还没有出Queue。

5. 启动Consumer,监听Broker-2
在Broker-1的Console上可以看到100条消息已经出Queue:foo.bar。
注意,这里Number Of Consumers 数量为0,因为确实没有Consumer连接到Broker-1上。

在Broker-2的Console上,可以看到100条消息已经入并且出Queue:foo.bar。
注意,这里Number Of Consumers 数量为1,因为有一个Consumer连接到Broker-2上。
 在Broker-2的Console上,查看Active Consumers详细信息:
  在Broker-1的Console上,再次查看Queue的信息,发现Number Of Consumers 数量为1。

在Broker-1的Console上,查看Active Consumers详细信息:
发现Consumer就是Broker-2。
6. 启动Producer,向Broker-2发送100条消息,启动Consumer,监听Broker-1
在Broker-2的Console上,发现有新的100条消息入Queue:foo.bar,但是没有被消费掉。


7. 修改Broker-1的activemq.xml的networkConnectors配置片段如下:duplex="true"

 <networkConnectors>
         <networkConnector
            name="T:broker1->broker2"
            uri="static:(tcp://localhost:61626)"
            duplex="true"
            decreaseNetworkConsumerPriority="true"
            networkTTL="2"
            dynamicOnly="true">
            <excludedDestinations>
                  <queue physicalName=">" />
            </excludedDestinations>
         </networkConnector>
         <networkConnector
            name="Q:broker1->broker2"
            uri="static:(tcp://localhost:61626)"
            duplex="true"
            decreaseNetworkConsumerPriority="true"
            networkTTL="2"
            dynamicOnly="true">
            <excludedDestinations>
                  <topic physicalName=">" />
            </excludedDestinations>
         </networkConnector>
</networkConnectors>


8. 重新启动Broker-1,Broker-2

9. 重新启动Producer,向Broker-2发送100条消息
在Broker-2的Console上,发现100条消息入Queue:foo.bar。


10. 重新启动Consumer,监听Broker-1
在Broker-2的Console上,发现100条消息入并且出Queue:foo.bar。

在Broker-2的Console上,查看Active Consumers详细信息:
发现Consumer就是Broker-1。

在Broker-1的Console上,查看Queue,发现消息来自Broker-2的foo.bar。
 
参考文献:
1. http://akuntamukkala.blogspot.com/2014/02/activemq-network-of-brokers-explained.html
2. http://akuntamukkala.blogspot.com/2014/02/activemq-network-of-brokers-explained_28.html
3. http://akuntamukkala.blogspot.com/2014/03/activemq-network-of-brokers-explained.html
4. http://akuntamukkala.blogspot.com/2014/03/activemq-network-of-brokers-explained_26.html
5. http://akuntamukkala.blogspot.com/2014/05/activemq-network-of-brokers-explained.html

没有评论: