簡體   English   中英

ActiveMQ拋出不匹配的確認異常

[英]ActiveMQ throwing Unmatched acknowledge exception

WARN | Async error occurred: javax.jms.JMSException: Unmatched acknowledge: MessageAck {commandId = 30, responseRequired = false, ackType = 2, consumerId = ID:PC02-DT-009-52405-1421153309991-1:3:10:1, firstMessageId = ID:PC02-DT-009-52360-1421152976467-1:4:11:1:1, lastMessageId = ID:PC02-DT-009-52360-1421152976467-1:4:11:1:1, destination = queue://DATA.DESTINATION, transactionId = null, messageCount = 1, poisonCause = null}; Could not find Message-ID ID:PC02-DT-009-52360-1421152976467-1:4:11:1:1 in dispatched-list (start of ack)
javax.jms.JMSException: Unmatched acknowledge: MessageAck {commandId = 30, responseRequired = false, ackType = 2, consumerId = ID:PC02-DT-009-52405-1421153309991-1:3:10:1, firstMessageId = ID:PC02-DT-009-52360-1421152976467-1:4:11:1:1, lastMessageId = ID:PC02-DT-009-52360-1421152976467-1:4:11:1:1, destination = queue://DATA.DESTINATION, transactionId = null, messageCount = 1, poisonCause = null}; Could not find Message-ID ID:PC02-DT-009-52360-1421152976467-1:4:11:1:1 in dispatched-list (start of ack)
    at org.apache.activemq.broker.region.PrefetchSubscription.assertAckMatchesDispatched(PrefetchSubscription.java:482)
    at org.apache.activemq.broker.region.PrefetchSubscription.acknowledge(PrefetchSubscription.java:214)
    at org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:426)
    at org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:408)
    at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:77)
    at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:77)
    at org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:287)
    at org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:87)
    at org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:508)
    at org.apache.activemq.command.MessageAck.visit(MessageAck.java:236)
    at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:329)
    at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:184)
    at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
    at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
    at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:288)
    atorg.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
    at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214)
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)

這是我在activeMQ日志中獲得的異常。 場景:我有10個消費者,我在消費者正在收聽的目標隊列中有100條消息。 消費者正在獲取大約10-20條消息的消息,但最終會因上述異常而停止從隊列中獲取消息。 我的理解是,只有在返回確認時才會給消費者一個新的消息(如果我是對的)JMS容器:

<jms:listener-container container-type="default" connection-factory="jmsConsumerConnectionFactory" acknowledge="auto"> <jms:listener destination="DATA.DESTINATION" ref="jmsMessageListener" concurrency="10-15" method="onMessage"/> </jms:listener-container>

非常感謝任何幫助,謝謝!

好吧,讓我感謝自己回答這個問題。 顯然,當通過httpclient連接到數據庫時,消費者遇到了一些異常,這會殺死所有的消費者線程。 無論如何,沒有任何異常發生的任何人都可以通過以下方式嘗試解決:1。在activeMQ配置“conf / activemq.xml”中增加內存限制2.嘗試在消息本身消息中將確認方法更改為“已處理”或確認。確認();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM