与竞争消费者一起处理消息

时间:2016-11-15 10:52:14

标签: design-patterns jms integration messaging

问题:

  • 我在特定序列(FIFO)的队列中接收消息(比如命令)
  • 我在队列中有竞争消费者
  • 为了进一步增加复杂性,消费者可能只对订单的特定版本感兴趣,具体取决于其状态。(比如说版本1,版本2和版本5)
  • 订单上有订单版本号,但不能用于排序,因为我的监听器可能对所有版本不感兴趣(消费者可能只对版本说明版本1,版本2和版本5感兴趣)

我如何确保按照收到的订单处理消费者的消息?

1 个答案:

答案 0 :(得分:0)

您不能与多个消费者合作,至少不是基础JMS。你需要提供逻辑。

我正在考虑的解决方案都很糟糕,因为它需要异步集成的优点并尝试使其同步。对于附加了版本的每个“对象”或“消息”或“类型”,您可以跟踪您收到的版本并尝试保证按顺序处理它们。如果消费者收到它们的故障,消费者可能只是停留在其轨道上或者可以重新排队消息,但是任何一种解决方案都有一些不好之处。

如果存在一组有限的对象版本,并且您可能多次看到对象,则可以使用消息选择器来确保给定的使用者是唯一看到该特定ID消息的消费者。 / p>

如果您的JMS提供程序支持优先级队列,您可以指定不同的优先级,并希望这以适当的顺序给出它们,但即使这样也会附加竞争条件。

我再次问一个问题:你使用的是正确的技术吗?