【问题标题】:RabbitMQ queue order managementRabbitMQ 队列顺序管理
【发布时间】:2013-07-12 19:26:01
【问题描述】:

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

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

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

例如,如果我的潜在客户操作发生在点击操作之后一秒钟,而点击生成器停止了几秒钟,我将在点击之前消耗潜在客户,我的跟踪系统将无法工作。

我想知道如何根据附加到消息的标头设置队列的顺序。 我所有的服务器都是同步的,它们的时钟相差

感谢您的帮助。

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

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

    【讨论】:

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

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

    【讨论】:

    • 实际上,我可能一次在队列中有数百万条消息,我不能让每个消费者浏览所有这些消息以找到最新的消息。另一方面,我可以购买/安装/配置负载平衡器,以确保“会话”中的连续操作由同一生产服务器处理。现在我正在为我的前端服务器使用 DNS 循环,这既便宜又容易。
    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多