ActiveMQ 无法相互收到消息 5
有两台MQ,一台MQ01(192.168.15.193),一台MQ02(192.168.15.194).两台MQ做了相互转发消息设置。两台上都设置了Queue,Topic...
有两台MQ, 一台MQ01(192.168.15.193),一台MQ02(192.168.15.194).两台MQ做了相互转发消息设置。两台上都设置了Queue,Topic
MQ01:
<networkConnectors>
<networkConnector uri="static:(tcp://192.168.15.194:61616)" decreaseNetworkConsumerPriority="true"/>
</networkConnectors>
MQ02:
<networkConnectors>
<networkConnector uri="static:(tcp://192.168.15.193:61616)" decreaseNetworkConsumerPriority="true"/>
</networkConnectors>
才开始两台MQ收发消息没有任何问题,但是运行一段时间后,两台MQ相互直接收发消息就不正常了。比如:一个消费者连接到MQ01上,一个生产者连接到
MQ02上发消息,但是MQ01并没有收到消息。或者一个消费者连接到MQ02上,一个生产者连接到MQ01上发消息,但是MQ02并没有收到消息.但是
单独将生产者跟消费者连接到同一个MQ上,收发消息正常。此时MQ01跟MQ02之间消息收发不成功,两台MQ日志上都没有错误,而且两台MQ之间的连接
显示正常。每次出现这种情况后,我都是重启两台MQ,问题可以解决,但是过不了多久,问题又重现了。请问各位大牛,遇到过这种情况没,是怎么解决的,小弟
不胜感激!!!
我测试出,当MQ的Java虚拟机内存使用达到一定数量时,会必现这种情况。但是当我调低了消息过期时间,队列不活动删除时间,还是出现了 一台MQ无法 通知另外一台MQ,有消费者连上了。 展开
MQ01:
<networkConnectors>
<networkConnector uri="static:(tcp://192.168.15.194:61616)" decreaseNetworkConsumerPriority="true"/>
</networkConnectors>
MQ02:
<networkConnectors>
<networkConnector uri="static:(tcp://192.168.15.193:61616)" decreaseNetworkConsumerPriority="true"/>
</networkConnectors>
才开始两台MQ收发消息没有任何问题,但是运行一段时间后,两台MQ相互直接收发消息就不正常了。比如:一个消费者连接到MQ01上,一个生产者连接到
MQ02上发消息,但是MQ01并没有收到消息。或者一个消费者连接到MQ02上,一个生产者连接到MQ01上发消息,但是MQ02并没有收到消息.但是
单独将生产者跟消费者连接到同一个MQ上,收发消息正常。此时MQ01跟MQ02之间消息收发不成功,两台MQ日志上都没有错误,而且两台MQ之间的连接
显示正常。每次出现这种情况后,我都是重启两台MQ,问题可以解决,但是过不了多久,问题又重现了。请问各位大牛,遇到过这种情况没,是怎么解决的,小弟
不胜感激!!!
我测试出,当MQ的Java虚拟机内存使用达到一定数量时,会必现这种情况。但是当我调低了消息过期时间,队列不活动删除时间,还是出现了 一台MQ无法 通知另外一台MQ,有消费者连上了。 展开
2个回答
展开全部
经过的实际处理,在activemq 5.9.1中也发现这种问题。
经发现是queue的策略没有配置导致的。
在<destinationPolicy>
<policyMap>
<policyEntries>增加对Queue的策略管理如下:
<!-- 属性enableAudit=false,是防止消息在回流后被当做重复消息而不被转发 -->
<policyEntry queue=">" producerFlowControl="false" memoryLimit="10mb" enableAudit="false">
<!-- 属性replayWhenNoConsumers=true,保证在该节点断开,并重启后,且consumers已经连接到另外一个节点上的情况下,消息自动回流到原始节点 -->
<networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/>
</networkBridgeFilterFactory>
</policyEntry>
同时你需要通过配置broker相关的通信处理:
<networkConnectors>
<networkConnector uri="static:failover://(tcp://IP:端口号,tcp://IP:端口号)" duplex="true" conduitSubscriptions="false"/>
</networkConnectors>
这样就不会有问题了。
经发现是queue的策略没有配置导致的。
在<destinationPolicy>
<policyMap>
<policyEntries>增加对Queue的策略管理如下:
<!-- 属性enableAudit=false,是防止消息在回流后被当做重复消息而不被转发 -->
<policyEntry queue=">" producerFlowControl="false" memoryLimit="10mb" enableAudit="false">
<!-- 属性replayWhenNoConsumers=true,保证在该节点断开,并重启后,且consumers已经连接到另外一个节点上的情况下,消息自动回流到原始节点 -->
<networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/>
</networkBridgeFilterFactory>
</policyEntry>
同时你需要通过配置broker相关的通信处理:
<networkConnectors>
<networkConnector uri="static:failover://(tcp://IP:端口号,tcp://IP:端口号)" duplex="true" conduitSubscriptions="false"/>
</networkConnectors>
这样就不会有问题了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询