RabbitMQ队列订单管理

use*_*791 2 rabbitmq

我目前正在为多个前端生产者在同一个队列上编写的跟踪系统实现RabbitMQ。

基本上,我有两种类型的消息在队列中发送,因为跟踪工作流有两个步骤:印象/点击=>线索/销售。这很简单:用户单击横幅,然后在被重定向到的网站上执行操作。此操作可能需要几秒钟到几天才能完成。我需要根据相应的点击次数来消耗销售线索或销售。

问题是我需要按时间顺序使用消息。如果所有生产者都以相同的速度在队列中发送消息,一切都会很好(即,消息应以FIFO方式正确排序),但是当其中一个生产者(出于某种原因)在队列中写入速度较慢时,我将遇到问题。

例如,如果我的线索动作发生在点击动作之后一秒钟,并且点击生成器停顿了几秒钟,那么我将在点击之前消耗掉线索,而我的跟踪系统将无法工作。

我想知道如何根据邮件附带的标头设置队列的顺序。我所有的服务器都是同步的,并且它们的时钟相差不到1ns,因此我想根据此信息对队列进行排序,但是我在文档中的任何地方都找不到设置队列顺序或使用顺序的方法。

谢谢你的帮助。

pin*_*ain 7

AMQP队列是FIFO队列。在发布大量同步消息的情况下,哪种消息先出现可能会有些歧义,因此您可能希望消息one和消息two在队列中的顺序可能与现实世界中发生的顺序不同。这是您为HA和速度付出的代价。如果您想进一步了解它,可以在IRC rabbitmq频道上提问。

  • 实际上问题不在于rabbitmq和“标准fifo”,更多的是我试图通过软件来弥补潜在的硬件故障(即:如果我的生产者之一滞后并且发布时间太长,请rabbitmq以非FIFO的方式重新排序消息)由于某些未知的原因)。基本上,我应该摆脱一个糟糕的设计实践:) (2认同)