【发布时间】:2017-04-17 20:58:17
【问题描述】:
我有一个 ActiveMQ v5.14.1 的 3 个代理设置。该设置涉及一组复合目标,这些目标从另一个队列中提取消息副本。以下是其中一个代理的配置 -
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="brokerC"
dataDirectory="${activemq.data}"
schedulePeriodForDestinationPurge="10000"
schedulerSupport="true">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000" >
<deadLetterStrategy>
<sharedDeadLetterStrategy processExpired="false" />
</deadLetterStrategy>
<networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/>
</networkBridgeFilterFactory>
</policyEntry>
<policyEntry topic=">" >
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="1000"/>
</pendingMessageLimitStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<!-- Added entry for network of brokers -->
<networkConnectors>
<networkConnector name="linkFromCToA"
uri="static:(tcp://xx.xxx.xx.xxx:61616)"
useVirtualDestSubs="true"/>
<networkConnector name="linkFromCToB"
uri="static:(tcp://xx.xxx.xx.xxx:61616)"
useVirtualDestSubs="true"/>
</networkConnectors>
<managementContext>
<managementContext createConnector="false"/>
</managementContext>
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<storeUsage limit="20 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
<!-- destroy the spring context on shutdown to stop jetty -->
<shutdownHooks>
<bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
</shutdownHooks>
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeQueue name="Q.1" forwardOnly="false">
<forwardTo>
<queue physicalName="Q.2" />
</forwardTo>
</compositeQueue>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
</broker>
这些配置在所有 3 个代理上都是相似的(当然除了代理 url)。一段时间后,在所有 3 个经纪人的 dlq 上,我看到以下异常 -
java.lang.Throwable: duplicate from store for queue://Q.2
此异常位于 dlq 中消息的标头“dlqDeliveryFailureCause”中。我观察到在 1 个代理设置中,这个问题永远不会出现。仅当我设置了 2 个或更多代理网络时。
【问题讨论】:
标签: apache activemq message-queue