Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php RabbitMQ-耗时作业的并行处理_Php_Mysql_Linux_Rabbitmq - Fatal编程技术网

Php RabbitMQ-耗时作业的并行处理

Php RabbitMQ-耗时作业的并行处理,php,mysql,linux,rabbitmq,Php,Mysql,Linux,Rabbitmq,让我给你一个我正在努力完成的背景 我必须在Linux上用php/mysql开发一个系统。我计划使用RabbitMQ来实现一些需要并行处理的功能 我每个客户都有一个作业,根据要为给定客户处理的数据量,可能需要5分钟到70分钟才能完成。客户端可以随机发布作业请求 让我们假设5个客户发布他们的作业,完成各自作业所需的时间如下所示 客户1工作-65分钟 客户2工作-10分钟 客户3工作-5分钟 客户4工作-10分钟 客户5工作-20分钟 正常队列有一个问题,因为client1的作业需要65分钟才能完

让我给你一个我正在努力完成的背景

我必须在Linux上用php/mysql开发一个系统。我计划使用RabbitMQ来实现一些需要并行处理的功能

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

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

  • 客户1工作-65分钟
  • 客户2工作-10分钟
  • 客户3工作-5分钟
  • 客户4工作-10分钟
  • 客户5工作-20分钟
正常队列有一个问题,因为client1的作业需要65分钟才能完成,因此client2必须等待75分钟(65+10)才能完成10分钟的作业

我知道,在RabbitMQ中,我可以创建许多工人来处理此作业,但根据作业所需的时间和作业在队列中的位置,客户端完成作业可能需要很多时间

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


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

通过使用
预回迁计数=1创建每个工作者消费者,可以轻松完成这一任务。这就是您想要的吗?prefetch count=1在一定程度上解决了这个问题,但它仍然需要预定义的使用者才能运行。以我的示例为例,其中5个客户作业将被处理。如果第一个作业需要65分钟,第二个作业需要10分钟,那么prefetch_count=1将允许我在第二个作业之后巧妙地通过第三个作业,但5分钟的作业仍需要等待10分钟。我想找出一种方法,不必等待10分钟,只允许第三个作业在启动后立即开始执行。希望我的问题清楚?不,不清楚。队列中由一个使用者接收的消息不会阻止其他消息被使用。同意。但我说的是工人。那么,您的意思是,通过使用预回迁计数=1,我可以为5个客户端作业创建5个消费者吗?很抱歉,如果您使用使用者逻辑包装脚本并运行5次以获得5个并发工作线程,那么我已经从这里给出的理解中理解了预取计数。或者,你可以乱用叉子和穿线,但这是一种快速而安全的方法。