1. 部署拓扑图如下:
和上一篇文章的拓扑图唯一不同的是Queue变成了Topic,其它都一样。
2. Broker-1上的activemq.xml的networkConnectors配置片段如下:
<networkConnectors>
<networkConnector
name="T:broker1->broker2"
uri="static:(tcp://localhost:61626)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="false"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
<networkConnector
name="T:broker1->broker3"
uri="static:(tcp://localhost:61636)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="false"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
</networkConnectors>
3. 启动Broker-1、Broker-2、Broker-3
在Broker-1的Console上,看到2个Network Connector已经建立。
4. 启动持久化订阅Subscriber-1、Subscriber-2、Subscriber-3
在Broker-2的Console上,看到1个Subscriber:Subscriber-1。
在Broker-1的Console上,看到3个Subscriber:Subscriber-1、Subscriber-2、Subscriber-3。
5. 启动Producer
在Broker-3的Console上,看到有重复的消息(Message ID相同),由于ActiveMQ不允许有重复消息,这些重复的消息将被丢弃。
那么,为什么会有重复的消息呢?
因为从Broker-1的角度看,Subscriber-1、Subscriber-2、Subscriber-3都被看成独立的订阅者,因此要向这三个订阅者发送相同的消息,由于Subscriber-2和Subscriber-3都与Broker-3连接,因此消息就重复了。
在Broker-1的Console上,消息入了10条,消费了10条。
在Broker-3的Console上,消息入了20条,消费了10条。
要想消除这个重复消息的错误也很简单,只要设置 conduitSubscriptions="true"
在Broker-1的Console上,这次只看到2个Subscriber:Broker-2、Broker-3。
在Broker-3的Console上,可以看到2个Subscriber各自入了10条消息,消费了10条消息。
参考文献:
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
和上一篇文章的拓扑图唯一不同的是Queue变成了Topic,其它都一样。
2. Broker-1上的activemq.xml的networkConnectors配置片段如下:
<networkConnectors>
<networkConnector
name="T:broker1->broker2"
uri="static:(tcp://localhost:61626)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="false"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
<networkConnector
name="T:broker1->broker3"
uri="static:(tcp://localhost:61636)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="false"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
</networkConnectors>
3. 启动Broker-1、Broker-2、Broker-3
在Broker-1的Console上,看到2个Network Connector已经建立。
4. 启动持久化订阅Subscriber-1、Subscriber-2、Subscriber-3
在Broker-2的Console上,看到1个Subscriber:Subscriber-1。
在Broker-3的Console上,看到2个Subscriber:Subscriber-2、Subscriber-3。
在Broker-1的Console上,看到3个Subscriber:Subscriber-1、Subscriber-2、Subscriber-3。
5. 启动Producer
在Broker-3的Console上,看到有重复的消息(Message ID相同),由于ActiveMQ不允许有重复消息,这些重复的消息将被丢弃。
那么,为什么会有重复的消息呢?
因为从Broker-1的角度看,Subscriber-1、Subscriber-2、Subscriber-3都被看成独立的订阅者,因此要向这三个订阅者发送相同的消息,由于Subscriber-2和Subscriber-3都与Broker-3连接,因此消息就重复了。
在Broker-1的Console上,消息入了10条,消费了10条。
在Broker-3的Console上,消息入了20条,消费了10条。
要想消除这个重复消息的错误也很简单,只要设置 conduitSubscriptions="true"
在Broker-1的Console上,这次只看到2个Subscriber:Broker-2、Broker-3。
在Broker-3的Console上,可以看到2个Subscriber各自入了10条消息,消费了10条消息。
参考文献:
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
没有评论:
发表评论