进程A正在计算对象A1、A2、A3等的值,并将结果发送到中间件队列(rabbitmq)。消费者读取队列并进一步处理这些结果。 周期性地处理a必须发送这些值的快照,以便消费者可以进行其他计算。这些对象的值可能会独立更改。队列可能类似于a1、a1、a2、a1、a2、a2、a3…消费者处理队列中的每个项目。快照必须包含所有对象,使用者将一次性处理所有对象的此消息。
所以需要有这样一个队列:a1,a1,a3,a2,a2,[快照,a1,a2,a3],a3,a1…问题是,这些项的类型不同:一种用于A1、A2等对象,另一种用于快照。这意味着它们应该在不同的队列中进行处理,但在这种情况下,存在一个竞争条件:使用者可能在处理快照之前处理对象。
有没有什么模式可以解决这个(相当常见的)问题?我们使用rabbitmq进行消息队列。
每个使用者使用一个队列和一个内容类型前缀来指示要传递的消息类型。在think中,AMQP消息中可能有一个“type”属性,但我从未使用过它,所以我不知道它是否适用于这个问题。