我正在考虑使用 Gearman 处理 MySQL 表中的作业jobs_queue
并将它们的状态标记为locked
一种作业不会被占用两次的方式(现在正在发生)。
问题:在上述场景中,一个作业可能需要 10 秒才能完成,我希望每 2 秒开始处理一个新作业(以实现某种形式的速率限制)。目前,从表中检索作业的服务器也是处理作业的同一台机器。
Gearman 是否适合按照所述进行工作排队?客户端将创建自己完成的作业(同一台机器上的多个工人)。
是的,但您可以直接将作业发送到 Gearman 作业服务器,而不是拥有 MySQL 作业列表。这意味着您不必“锁定”工作。
您可以让多个工作人员运行相同的工作。
如果您按照我所说的方式进行操作,那么创建更多工作的工作人员将需要使用 gearmam do 背景,否则它将陷入死循环。 http://www.php.net/manual/en/gearmanclient.dobackground.php