2013-03-19 161 views
1

我目前正在实施rabbitMQ跟踪系统,多个前面的生产者在同一个队列上写。RabbitMQ队列订单管理

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

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

例如,如果我的领导行为发生的点击动作后一秒钟,点击制作摊位几秒钟,我会点击之前消耗的铅和我的跟踪系统将无法正常工作。

我想知道如何根据该附加到该消息的标题设置为使队列。 我所有的服务器都是同步的,他们的时钟有< 1ns的差异,所以我想根据这些信息来订购我的队列,但是我无法在文档的任何位置找到设置队列顺序或消费顺序的方法。

感谢您的帮助。

回答

3

AMQP队列是FIFO队列。在大量同时发布消息的情况下,可能会有一些含糊不清的消息,因此您可能会认为消息one和消息two在队列中的排列顺序可能与它们在现实世界中发生的顺序不同。这是你为HA和速度付出的代价。如果你想知道更多关于它的信息,你可以在IRC rabbitmq频道上提问。

+2

其实问题并不在于rabbitmq和“标准fifo”,它更多的是通过软件来弥补潜在的硬件故障(即:如果我的一个制作人员滞后并且花费太长时间,要求rabbitmq以非FIFO方式重新排序消息出于某种未知的原因)。 基本上是一个可怕的设计实践,我应该摆脱:) – user1159791 2013-07-24 10:25:36

0

我认为队列意味着队列,即先进先出。 Mabe你可以在消费过程中对它们进行分类吗?我的意思是,例如,从队列中取出10条消息,解析它们,然后按照正确的顺序将它们放到自己的队列或列表中。

+0

实际上,我可能会在队列中同时发送数百万条消息,我不能让每个消费者浏览所有这些消息以找到最近的消息。 另一方面,我可以购买/安装/配置负载平衡器,以确保“会话”中的连续操作由同一个生产服务器处理。现在我正在为我的前台服务器使用DNS roundrobin,这很便宜而且容易。 – user1159791 2013-03-20 09:22:35