0

进程 A 正在计算对象 a1、a2、a3 等的值,并将结果发送到中间件队列 (RabbitMQ)。消费者读取队列并进一步处理这些结果。进程 A 必须定期发送这些值的快照,以便消费者可以进行一些其他计算。这些对象的值可能会独立改变。队列可能看起来像这样 a1, a1, a2, a1, a2, a2, a3... 消费者处理队列中的每个项目。快照必须包含所有对象,消费者将一次性处理所有对象的此消息。

所以要求是有一个这样的队列:a1,a1,a3,a2,a2,[snapshot,a1,a2,a3],a3,a1 ...问题是这些项目是不同的类型:一种类型对于像 a1、a2 和其他对象这样的快照。这意味着它们应该在不同的队列中处理,但在这种情况下存在竞争条件:消费者可能会在处理快照之前处理对象。

有什么模式可以解决这个(很常见的)问题吗?我们使用 RabbitMQ 进行消息队列。

4

1 回答 1

0

每个消费者使用一个队列和一个内容类型前缀来指示正在传递的消息的类型。认为AMQP消息中可能有一个'type'属性,但我从未使用过它,所以我不知道它是否适用于这个问题。

于 2010-04-07T13:12:17.243 回答