2016-12-02 9 views
0

У меня есть 3-брокерская настройка ActiveMQ v5.14.1. Настройка включает в себя набор составных целей, которые вытягивают копию сообщения из другой очереди. Ниже конфигурация одного брокера -ActiveMQ dlqDeliveryFailureCause java.lang.Throwable: дубликат из хранилища для очереди

<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&amp;wireFormat.maxFrameSize=104857600"/> 
     <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
     <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
     <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
     <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;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 'ы). На DLQ всех 3-х брокеров через некоторое время я вижу следующее исключение -

java.lang.Throwable: duplicate from store for queue://Q.2 

Это исключение в заголовке «dlqDeliveryFailureCause» сообщения, сидя в DLQ. Я заметил, что в 1 брокерской установке этот вопрос никогда не возникает. Это происходит только тогда, когда у меня установлена ​​2 или более сеть брокеров.

Я попытался выполнить поиск в Интернете, но не нашел решения или причины, почему это происходит. Любая помощь будет оценена!

ответ

1

Для тех, кто застрял в этой проблеме, ознакомьтесь со следующей ссылкой: ActiveMQ User discussion.

Два предложения 1. отключить аудит на уровне очереди и 2. изменить messageTTL = 2 (coz у меня 3 брокера).