1

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

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

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

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

4

1 回答 1

0

1: JMS 在Session上有一个标志*CLIENT_ACKNOWLEDGE* 你可以在这里看到它。我从未使用过它,但似乎可以做你想做的事。

2:

2.1:同一个队列有N个消费者:可以探索一些实现支持的Exclusive Consumer 。(对于 AtiveMQ:这里)。

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

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

我希望这可以帮助

于 2013-04-16T06:22:49.277 回答