我正在尝试使用通过双工WAN连接器桥接两个LAN的代理网络:
软件和配置:
当我最初将所有内容都放到网上时,无论我在线播放的顺序如何,发布者和订阅者之间的沟通都能完美无瑕。我已经让系统连续几周运行并且没有问题。
我观察到的是,如果重新启动代理C,则代理B中不会出现新的主题。代理B中出现新主题,因为它们是由订阅者创建的。现有的或新的主题都没有通过WAN传播到代理C.我已经使用jconsole验证了这一点。
如果我重新启动经纪人B,问题会立即消失。经纪人B中包含的主题(根据jconsole)与重启之前的主题相同,但现在他们神奇地出现在C中。
经纪人B和C具有相同的配置(如下所示)。唯一的区别是B创建了使用以下代码创建的C的双工网络连接器:
final NetworkConnector wanNC = new DiscoveryNetworkConnector(
new URI(String.format("static:(failover:(tcp://%s:%d))", parentNode, port)));
wanNC.setCheckDuplicateMessagesOnDuplex(true);
wanNC.setDecreaseNetworkConsumerPriority(true);
wanNC.setDuplex(true);
wanNC.setName(NetworkUtils.getHostName());
wanNC.setNetworkTTL(10);
wanNC.setSuppressDuplicateTopicSubscriptions(false);
broker.addNetworkConnector(wanNC);
broker.xml:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
<!-- Allows us to use system properties as variables in this configuration file -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" />
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="${broker.id}" start="false"
offlineDurableSubscriberTimeout="5000" offlineDurableSubscriberTaskSchedule="5000"
persistent="false" useJmx="true" schedulePeriodForDestinationPurge="86400000">
[...]
<networkConnectors>
<networkConnector name="z-broker-${broker.id}-x-nc"
decreaseNetworkConsumerPriority="true"
networkTTL="10"
uri="multicast://225.5.5.5:6555?group=TO_X">
<excludedDestinations>
<topic physicalName="X.A" />
</excludedDestinations>
</networkConnector>
<networkConnector name="z-broker-${broker.id}-y-nc"
decreaseNetworkConsumerPriority="true"
networkTTL="10"
uri="multicast://225.5.5.5:6555?group=TO_Y">
<excludedDestinations>
<topic physicalName="X.B.>" />
</excludedDestinations>
</networkConnector>
</networkConnectors>
<transportConnectors>
<transportConnector name="openwire"
uri="tcp://${broker.ip}:${broker.port}?maximumConnections=1000&wireFormat.maxFrameSize=104857600"
discoveryUri="multicast://225.5.5.5:6555?group=TO_Z" />
</transportConnectors>
</broker>
</beans>
答案 0 :(得分:0)
显然诀窍是改变网络连接器URI
static:(failover:(tcp://<ip>:<port>))
到
static:(tcp://<ip>:<port>)
由于任何原因我都不需要故障转移传输,因为连接是作为网络桥接而且只有一个远程地址。
无论出于何种原因,使用故障转移都会阻止主题在重新连接时传播。