RabbitMQ队列顺序管理

RabbitMQ队列顺序管理,rabbitmq,Rabbitmq,我目前正在为跟踪系统实现rabbitMQ,多个前端生产者在同一队列上写入 基本上,我有两种类型的消息在队列中发送,因为跟踪工作流有两个步骤:impression/click=>lead/sale。 这很简单:用户单击一个横幅,然后在他被重定向到的网站上执行一个操作。完成此操作可能需要几秒钟到几天的时间。 我需要消费铅或销售后,相应的预付款或点击 问题是我需要按时间顺序使用消息。虽然如果所有生产者都以相同的速度在队列中发送消息(即,消息应以FIFO方式正确排序),那么一切都应该是好的,但当其中一个

我目前正在为跟踪系统实现rabbitMQ,多个前端生产者在同一队列上写入

基本上,我有两种类型的消息在队列中发送,因为跟踪工作流有两个步骤:impression/click=>lead/sale。 这很简单:用户单击一个横幅,然后在他被重定向到的网站上执行一个操作。完成此操作可能需要几秒钟到几天的时间。 我需要消费铅或销售后,相应的预付款或点击

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

例如,如果我的潜在客户操作发生在单击操作后一秒钟,并且单击生产者暂停几秒钟,我将在单击之前消耗潜在客户,我的跟踪系统将无法工作

我想知道如何根据附加到消息的头为队列设置顺序。
我所有的服务器都是同步的,它们的时钟都有我认为队列意味着队列,即先进先出。也许你可以在消费期间对它们进行分类?我的意思是,例如,您从队列中取出10条消息,对它们进行解析,然后按正确的顺序将它们放入您自己的队列或列表中。

AMQP队列是FIFO队列。在同时发布大量消息的情况下,可能会出现一些不明确的情况,即哪条消息首先出现,所以您可能会认为消息
one
和消息
two
在队列中的顺序可能与现实世界中发生的顺序不同。这是你为HA和速度付出的代价。如果您想了解更多信息,可以在IRC rabbitmq频道上提问。

事实上,我一次可能有数百万条消息在队列中,我无法让每个消费者浏览所有这些消息以找到最近的消息。另一方面,我可以购买/安装/配置负载平衡器,以确保“会话”中的后续操作由同一台生产服务器处理。现在我正在为我的前台服务人员使用DNS循环,这既便宜又简单。实际上问题不在于rabbitmq和“标准fifo”,而是我试图通过软件来补偿潜在的硬件故障(也就是说,如果我的一个制作人由于某种未知的原因而延迟发布并花费太长时间,请rabbitmq以非先进先出的方式重新排序消息)。这基本上是一种糟糕的设计实践,我应该放弃:)