我有一个系统,我们用OpenMQ。我注意到,有时我们从消费者那里收到这个错误:
WARN org.springframework.jms.listener.DefaultMessageListenerContainer - Setup of JMS message listener invoker failed for destination 'Sun Java System MQ Destination
getName(): xxMessageNamexx
Class: com.sun.messaging.Queue
getVERSION(): 3.0
isReadonly(): false
getProperties(): {imqDestinationName=xxDestinationNamexx, imqDestinationDescription=A Description for the Destination Object}' - trying to recover. Cause: [C4000]: Packet acknowledge failed. user=guest, broker=xxx:5555(55385)
com.sun.messaging.jms.JMSException: [C4000]: Packet acknowledge failed. user=guest, broker=xxx:5555(55385)此外,该消息将丢失,并且不再在队列中。
我知道我可以通过增加imqAckTimeout来解决这个问题,但是我想知道如果我们有超时问题,为什么会从队列中删除消息呢?
我是新来的消息队列,所以请告诉我,我可以提供哪些信息,可以帮助解决问题?
发布于 2015-04-17 15:36:12
嗯,这个答案现在向我解释了一切,https://stackoverflow.com/a/9886168/3314116。
在AUTO_ACKNOWLEDGE中使用AbstractMessageListenerContainer模式似乎可以让消息在使用消息之前得到确认。我想对我来说最好的选择是使用事务。
https://stackoverflow.com/questions/29501525
复制相似问题