当前位置: 首页 > 知识库问答 >
问题:

ActiveMQ引发不匹配的确认异常

凤晨朗
2023-03-14
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容器:

<代码>

非常感谢您的帮助,谢谢!

共有1个答案

景成和
2023-03-14

好吧,让我感谢自己回答这个问题。显然,消费者在通过httpclient连接到DB时遇到了一些异常,这会杀死所有消费者线程。无论如何,任何人在没有任何例外的情况下都可以尝试通过1解决这个问题。增加activeMQ配置“conf/activeMQ.xml”2中的内存限制。尝试将确认方法更改为“Transact”或消息本身消息中的确认。确认();

 类似资料:
  • 如果在ActiveMQ中创建了一个队列,该队列具有一个生产者(即客户端确认模式)和一个侦听器,在成功处理消息后,其onMessage方法中仅对其进行确认。假设存在异常,并且消息未被确认,因此仍在队列中。是否会再次发送给消费者?或者这些信息会发生什么?

  • 问题内容: 每当我清理项目时,都会说:PSI和索引不匹配该怎么办? 问题答案: 重要说明:这将清除架子,本地历史记录以及可能的其他缓存数据。 “文件”菜单>“使缓存无效并重新启动”。PSI缓存是受此命令影响的缓存之一,因此应该对其进行修复。

  • 我有一个切入点,我试图用LTW。我有两个方法,我试图建议,每一个与不同的参数列表。但是,它们都有一个我想要的共同参数。 以下是我想建议的方法签名: 我本来希望参数与execution()方法相关联,但有时会出现“混淆”,给我的是IP而不是用户名。 是我不正确地使用了AspectJ,还是这是LTW中的一个bug?我运行的是AspectJ 1.6.13

  • 我对Scanner有一个问题,因为它似乎采用输入值类型并强制用户下次输入值为相同类型。我找不到此代码不起作用的任何原因,并给我一个InputMismatchException,因为我已经编写了一百万次这样的代码并且没有问题。 这个问题不仅仅是register()方法的问题,而是整个程序的问题,例如下面的代码: 如果其中一种方法(如 register)要求用户输入字符串,则 int user=inp

  • (更新的代码)无论出于什么原因,InputMismatchException的catch块无法正常工作。当代码抛出此错误时,catch块不会捕获它。有人知道为什么会这样吗?

  • 我使用的是Laravel 5,在我的表单上单击提交时出现错误。 超文本标记语言 路线 控制器 错误 VerifyCsrfToken中的令牌不匹配异常。php第67行:在VerifyCsrfToken中。VerifyCsrfToken处的php第67行-