gpt4 book ai didi

java - JMS 先前的消息确认

转载 作者:行者123 更新时间:2023-11-30 08:24:47 27 4
gpt4 key购买 nike

我正在尝试解决以下情况:

我正在使用消息,但在我依赖的系统中发生中断以进行正确的消息处理(例如数据库)

我正在使用 CLIENT_ACKNOWLEDGE,并且只在没有抛出异常时调用 .acknowledge() 方法。

当我抛出异常、消息未被确认并且我可以看到未确认的队列正在建立时,这工作正常。但是,这些消息都已经传递给了消费者。

假设现在数据库重新联机,并且任何新消息都已成功处理。所以我调用他们.acknowledge。我读到调用 .acknowledge() 不仅会确认该消息,还会确认消费者之前收到的所有消息。

这不是我想要的!我需要重新发送/重试这些以前未确认的消息。我想将它们保留在队列中并让 JMS 处理重试,因为在“要重试的消息”的消费者中维护一个集合可能会面临丢失这些消息的风险(因为 .acknowledge 已经确认了所有消息+说硬件故障)。

有没有一种方法可以显式确认特定消息,而不会有这种“确认所有先前消息”的行为?

最佳答案

JMS 规范未定义确认特定消息。因此,一些 JMS 实现者提供每个消息确认,而一些则不提供。您将需要检查您的 JMS 提供程序文档。

消息队列通常可以选择如何将消息传递给客户端,可以是先进先出 (FIFO) 或基于优先级。选择 FIFO 选项,以便所有消息都按照它们进入队列的相同顺序传送。当数据库离线并恢复时,调用 recover 方法以相同的顺序再次重新传递所有消息。

关于java - JMS 先前的消息确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com