gpt4 book ai didi

java - 退出onMessage()后jms调用message.acknowledge()

转载 作者:行者123 更新时间:2023-12-01 04:44:39 24 4
gpt4 key购买 nike

我想同时使用来自多个队列的jms消息。所有消息在长时间运行处理后都应该进入数据库,我无权丢失它们。

问题:是否可以保存消息以供将来确认,并在处理另一条消息时调用 oldMessage.acknowledge()

我的第一个猜测是这是不可能的,因为它位于 jms 处理单元的深处,并且我必须在 onMessage(...) 方法中处理消息和确认。

第二个猜测是并发拆分 onMessage() 并允许对许多消息进行长时间运行处理。但这不是一个好的选择,因为我必须确保所有消息都有序!
第二个问题:并发处理的时候有没有办法保证传入的顺序?

最佳答案

1: JMS 在 session 上有一个标志,即 *CLIENT_ACKNOWLEDGE*,您可以看到它 here 。我从未使用过它,但似乎可以满足您的要求。

2:

2.1:同一个队列有 N 个消费者:您可以探索某些实现支持的独占消费者。 (对于 AtiveMQ:here)。

2.2 每个队列有 1 个使用者,但您想要对所有队列中的所有消息进行排序。您可以使用有序 SlackBuffer 的概念。

您可以探索另一种可能性,例如:将所有消息重定向到维护消息顺序的输出队列,并且您将仅使用该单个输出队列中的消息。消息的排序和重定向由 MQ 服务器完成。只有能够控制 MQ 服务器,这才是一个有效的想法。

希望这能有所帮助

关于java - 退出onMessage()后jms调用message.acknowledge(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16029386/

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