【问题标题】:RabbitMQ - parallel task consumingRabbitMQ - 并行任务消耗
【发布时间】:2017-02-15 07:53:36
【问题描述】:

我使用 RabbitMQ 将消息从 symfony 发送到 nodeJs。我会说需要并行处理。

我每个客户都有一个作业,可能需要 5 分钟到 70 分钟才能完成,具体取决于要为给定客户处理的数据量。客户可以随机发布工作请求。

假设有 5 个客户发布他们的工作,完成各自工作所需的时间如下所示

client1 job - 65 mins
client2 job - 10 mins
client3 job - 5 mins
client4 job - 10 mins
client5 job - 20 mins

正常队列存在问题,因为 client1 的作业需要 65 分钟才能完成,因此 client2 必须等待 75 分钟 (65 + 10) 才能完成需要 10 分钟的作业。

我知道在 RabbitMQ 中我可以创建许多工作人员来处理这项工作,但是根据工作所需的时间和工作在队列中的位置,客户可能需要很长时间才能获得他们的作业完成。

所以我希望为每个客户创建动态消费者。每个消费者单独为每个客户完成工作。

这在 Rabbitmq 中可行吗?如果是,如何实现?

【问题讨论】:

  • 我不是节点专家,但我认为它允许异步处理?难道你不能有一个进程监听 RabbitMQ 消息然后异步处理它们吗?

标签: node.js rabbitmq symfony


【解决方案1】:

你应该查看Rabbit MQ教程中关于Fair dispatch的部分。

它向您展示了如何使用$channel->basic_qos(null, 1, null); 一次只处理一项工作。因此,您可以公平地分配消息。

【讨论】:

    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2016-08-10
    • 2019-07-18
    • 1970-01-01
    • 2021-08-25
    • 2019-12-23
    相关资源
    最近更新 更多