我想同时使用来自多个队列的jms消息。在长时间运行处理后,所有消息都应该发送到数据库,我无权丢失它们。
问题:是否可以保存邮件以供将来确认,并在处理其他邮件时致电oldMessage.acknowledge()
?
我的第一个猜测是,这是不可能的,因为它在jms处理单元深处,我必须在onMessage(...)
方法中处理消息和确认。
第二个猜测是同时拆分onMessage()并允许对许多消息进行长时间运行处理。但这不是一个好的选择,因为我必须确保所有消息都来有序!
第二个问题:在并发处理时有没有办法确保传入的订单?
1 个答案:
答案 0 :(得分:0)
1: JMS在 Session 上有一个标志,即* CLIENT_ACKNOWLEDGE *,您可以看到它here。我从未使用它,但似乎做你想做的事。
<强> 2 强>
2.1:您有相同队列的N个消费者:您可以探索某些实现支持的独占消费者。 (对于AtiveMQ:here)。
2.2 每个队列有1个消费者,但您想要从所有队列中订购所有消息。
您可以使用有序SlackBuffer的概念。
您可以探索另一种可能性:将所有消息重定向到维护消息顺序的输出队列,您将只使用来自该单个输出队列的消息。消息的顺序和重定向由MQ服务器完成。如果您可以控制MQ服务器,那只是一个有效的想法。
我希望这可以提供帮助