Problem:
- 我以特定顺序(FIFO)在队列上接收消息(比如订单)
- 我的队列中有竞争的消费者
- 为了进一步增加复杂性,消费者可能只对订单的特定版本感兴趣,具体取决于其状态。(例如版本 1、版本 2 和版本 5)
- 订单版本号在订单上可用,但不能用于排序,因为我的听众可能不对所有版本感兴趣(消费者可能只对版本感兴趣,比如版本1、版本2和版本5)
我如何确保按照收到消息的顺序处理消费者之间的消息?
您不能使用多个消费者,至少不能使用基础 JMS。您需要提供逻辑。
我想到的解决方案都很糟糕,因为它利用了异步集成的优点并试图使其同步。对于每个附加了版本的“对象”或“消息”或“类型”,您可以跟踪您收到的版本并尝试保证它们按顺序处理。如果消费者无序地接收到它们,消费者可以停止在其轨道上或者可以重新对消息进行排队,但这两种解决方案都有一些令人讨厌的地方。
如果有一组有限的受版本控制的对象,并且您可能多次看到这些对象,则可以使用消息选择器来确保给定的使用者是唯一看到该特定 ID 的消息的使用者。
如果您的 JMS 提供程序支持优先队列,您可以分配不同的优先级,并希望这按适当的顺序提供它们,但即使这样似乎也会附加一个竞争条件。
我会再次问这个问题:您使用的技术正确吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)