【发布时间】:2014-05-06 21:43:46
【问题描述】:
我正在尝试解决以下情况:
我正在使用消息,但是在我依赖的系统中发生了中断以进行正确的消息处理(例如数据库)
我正在使用 CLIENT_ACKNOWLEDGE,并且只有在没有抛出异常时才调用 .acknowledge() 方法。
当我抛出异常、消息未被确认并且我可以看到未确认的队列正在建立时,这可以正常工作。但是,这些消息都已经交付给了消费者。
假设现在数据库重新联机,并且任何新消息都已成功处理。所以我打电话给他们 .acknowledge 。我读到调用 .acknowledge() 不仅会确认该消息,还会确认消费者之前收到的所有消息。
这不是我想要的!我需要重新传递/重试这些以前未确认的消息。我想将它们保留在队列中并让 JMS 处理重试,因为在“要重试的消息”的消费者中维护一个 Collection 可能会丢失这些消息(因为 .acknowledge 已经确认了所有这些消息+说硬件故障)。
有没有办法明确地确认特定消息,而不是这种“确认所有先前的消息”行为?
【问题讨论】: