我使用RabbitMQ从symfony向nodeJs发送消息。我想说需要并行处理。
我有一个每个客户端的工作,可能需要5分钟到70分钟才能完成,具体取决于给定客户端要处理的数据量。客户可以随机发布作业请求。
假设5个客户在完成各自工作所需的时间后发布他们的工作,如下所示
client1工作 - 65分钟 client2工作 - 10分钟 client3工作 - 5分钟 client4工作 - 10分钟 客户5工作 - 20分钟 普通队列有问题,因为client1的工作需要65分钟才能完成,所以client2必须等待75分钟(65 + 10)才能完成一个需要10分钟的工作。
我知道在RabbitMQ中我可以创建许多工作来处理这项工作,但是根据工作所需的时间和工作在队列中的位置,客户可能需要很多时间来获得他们的工作。工作完成。
所以我希望为每个客户创建动态消费者。每个消费者都会为每个客户单独完成工作。
Rabbitmq有可能吗?如果是,那怎么能实现呢?
答案 0 :(得分:0)
您应该在Rabbit MQ教程中查看关于Fair dispatch的部分。
它向您展示了如何使用$channel->basic_qos(null, 1, null);
一次只处理一个作业。所以你可以公平地分发这些信息。