2

在 JMS 消息(以及任何相应的写入)成功完成后,我将使用 Session 来提交对 JMS 消息的读取。

但是,如果我有一个错误,并且必须回滚,我想首先处理新消息,而不是那些(导致???)必须回滚的错误。我想最终重新处理失败的消息,但不要一遍又一遍地失败,而其他尚未看到的消息在它后面停滞不前,等待采取行动删除有问题的消息或修复使其失败的环境。

这是自动的吗?(将使用 Sonic MQ,如果这很重要)。如果是这样,那么这个问题的其余部分就没有实际意义了。

我是否需要或什至可以重置失败消息的优先级以将其推回队列中(在其他待处理消息之后,如果有的话)?如果我需要重置优先级,我该如何让那个“坚持”,因为我会回滚最初读取相关消息的事务。

4

1 回答 1

1

我不知道 Sonic MQ 中支持您开箱即用要求的功能,但还有其他选项:

  • 为失败的消息使用第二个队列。所以失败的消息会在另一个队列上再次发送。例如,如果第一个队列为空,则可以开始处理。

  • 在同一个队列上重新发送消息(具有相同甚至更低的优先级)

commit在这两种情况下,消息发送后,主队列上都有一个正常的。

相关:具有优先级的消息处理。James Shek 的回答:

JMS 规范指出:“JMS 不要求提供者严格执行消息的优先级排序;但是,它应该尽最大努力在正常消息之前传递加急消息。”

于 2013-08-22T20:01:28.597 回答