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
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
没有评论:
发表评论