queue - 在rabbitmq队列中,是否可以确保唯一消息是?

  显示原文与译文双语对照的内容

基本上我的消费者也是生产者。 我们得到一个初始数据集,它被发送到队列。 消费者接受一个项目并处理它,从那个角度来说,有 3种可能性:

  • 数据很好,并将'好'队列放入存储
  • 数据坏了,丢弃
  • 数据不是 good(yet) 或者 bad(yet) 所以数据被分解为较小的部分,并发送回队列以进行进一步处理。

我的问题是步骤 3,因为队列首先会变得很快,一段数据会被分解成队列中的一部分。

防止这种情况发生的方法是防止重复进入队列。 我不能在客户端这样做,因为在一个小时内我可以能有许多处理数数据点( 让每个客户在提交之前扫描它会让我太慢)的核心。 我想这需要在服务器端完成,但是我提到的数据非常大,并且不知道如何有效地保证。

我可能会问不可能,但我想我会给它。 任何想法都会非常感激。

时间: 原作者:

核心问题似乎是:


"...its possible that a piece of data is broken down into a part that's 


duplicated in the queue and the consumers continue to process it and 


end up in a infinite loop."



你可以集中于你所需要的排队项目的唯一性,但上面的问题是你应该集中注意力。 阻止无限循环的一种方法可以能是在消息负载中有一个"已经访问"位,它们在消息中排队。

另一种选择是让消费者重新队列回一个特殊队列,以防止无限循环。 无论哪种方式,你都应该将该问题处理成应用策略的核心部分,而不是使用消息传递系统的特性。

原作者:
...