进程 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 进行消息队列。