2012-09-28 92 views
2

我在AMQ 5.6中使用AMQ消息組和Kahadb持久消息並定期在日誌中看到此WARN。我沒有看到由此產生的任何具體錯誤,但我想知道這是什麼副作用,等等。ActiveMQ消息組 - ConcurrentModificationException

我的消費者是一個駝峯(2.9.2)路線與maxConcurrentConsumers = 5(使用AMQ連接池等)。我會嘗試在某個時候熬下來到單元測試...現在,這裏是堆棧跟蹤

Async error occurred: java.util.concurrent.ExecutionException: java.util.ConcurrentModificationException 
java.util.concurrent.ExecutionException: java.util.ConcurrentModificationException 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:83) 
    at org.apache.activemq.broker.region.Queue.doMessageSend(Queue.java:785) 
    at org.apache.activemq.broker.region.Queue.send(Queue.java:707) 
    at org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:407) 
    at org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:503) 
    at org.apache.activemq.broker.jmx.ManagedRegionBroker.send(ManagedRegionBroker.java:305) 
    at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129) 
    at org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:96) 
    at org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:306) 
    at org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:135) 
    at org.apache.activemq.broker.TransportConnection.processMessage(TransportConnection.java:453) 
    at org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:681) 
    at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292) 
    at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:150) 
    at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116) 
    at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50) 
    at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:231) 
    at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122) 
    at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: java.util.ConcurrentModificationException 
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) 
    at java.util.HashMap$KeyIterator.next(HashMap.java:828) 
    at org.apache.activemq.util.MarshallingSupport.marshalPrimitiveMap(MarshallingSupport.java:64) 
    at org.apache.activemq.command.Message.beforeMarshall(Message.java:210) 
    at org.apache.activemq.command.ActiveMQObjectMessage.beforeMarshall(ActiveMQObjectMessage.java:199) 
    at org.apache.activemq.openwire.v6.MessageMarshaller.looseMarshal(MessageMarshaller.java:277) 
    at org.apache.activemq.openwire.v6.ActiveMQMessageMarshaller.looseMarshal(ActiveMQMessageMarshaller.java:111) 
    at org.apache.activemq.openwire.v6.ActiveMQObjectMessageMarshaller.looseMarshal(ActiveMQObjectMessageMarshaller.java:111) 
    at org.apache.activemq.openwire.OpenWireFormat.marshal(OpenWireFormat.java:168) 
    at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.addMessage(KahaDBStore.java:429) 
    at org.apache.activemq.store.kahadb.KahaDBStore$StoreQueueTask.run(KahaDBStore.java:1177) 
+0

第一個建議是始終嘗試最新版本,因爲自那時起發生了修復。 –

+0

感謝蒂姆,計劃升級到5.6,但我試圖在此之前添加一些功能。我想檢查一下是否有任何東西在這方面特別修復......沒有看到與我的問題相匹配的任何AMQ JIRA ...... –

+0

自5.5.0以來有這麼多解決的問題,所以很難說當然。如果問題依然存在,那麼創建一個可以複製它的單元測試可以輕鬆驗證新版本的代理髮行版,併爲您提供在Jira中提交的內容。 –

回答

2

記錄了這樣的JIRA(AMQ-4092),這聽起來像一個組合的問題KahaDB和消息組。設置concurrentStoreAndDispatchQueues = false解決了這個問題(感謝Gary Tully的建議)