繁体   English   中英

如何确保在从未读取的消息之后处理回滚会话中读取的JMS消息?

[英]How to ensure that JMS messages read within a rolled back session are processed after never-before-read messages?

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

但是,如果我有一个错误,并且必须进行回滚,那么我想先处理新消息,而不是处理(引起???)已回滚错误的消息。 我希望最终重新处理失败的消息,但不要一遍又一遍地进行故障转移,而其他尚未看到的消息会停滞在后面,等待采取措施删除有问题的消息或修复导致其失败的环境。

这是自动的吗? (如果需要的话,将使用Sonic MQ)。 如果是这样,那么剩下的这个问题就没有意义了。

我是否需要或者甚至可以重置失败消息的优先级,以将其进一步推回队列中(在其他未决消息之后,如果有的话)? 如果我需要重置优先级,鉴于我本来会回滚最初读取有问题的消息的事务,那么该如何“坚持”一下。

我不知道Sonic MQ的功能是否可以立即支持您的要求,但是还有其他选择:

  • 将第二个队列用于失败的消息。 因此,失败的消息将再次发送到另一个队列。 例如,如果第一个队列为空,则处理可以开始。

  • 将邮件重新发送到同一队列(优先级相同甚至更低)

在这两种情况下,发送消息之后,主队列上都会进行常规commit

相关: 具有优先级的消息处理 引用詹姆斯·石的答案:

JMS Spec指出:“ JMS并不要求提供者严格执行消息的优先级排序;但是,它应该尽力在普通消息之前传递加急消息。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM