繁体   English   中英

Laravel 队列 - 作业之间的暂停

[英]Laravel Queue - Pause between jobs

我想创建一个队列 (AMAZON SQS),每 X 秒只运行一次作业。 因此,如果突然提交了 50 个作业,则最终排在队列中。 队列侦听器然后拉一个工作,做一些事情并等待 X 秒。 之后,下一个作业被拉取。 另一个 X 秒停顿。 等等等等

对于队列侦听器,sleep option 选项仅决定如果没有新的工作可用,worker 将“休眠”多长时间。 所以只有当队列中没有任何东西时它才会休眠。

或者我应该在我的 PHP 代码中加入一个 pause(x) 吗?

[编辑] 我刚刚使用 FIFO 和标准 AWS SQS 队列测试了睡眠方法,这弄乱了整个队列。 突然(成功地)重新提交了 3 次作业,然后进入失败状态。 此外,我的代码中给出的延迟(3-4 分钟)被忽略了,取而代之的是一分钟

<?php

namespace App\Jobs;

use App\City;

class RetrieveStations extends Job
{
protected $cities;

/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct ($cities)
{
    $this->cities = $cities;
}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{



    // code here
      doSomething()
      sleep(X);


}
}

我有完全相同的问题要解决。 我正在使用 Laravel 5.8,但我不知道如何让队列工作人员在作业之间等待一段固定的时间。

我现在正在考虑使用计划任务来处理这个问题。 我可以安排一个任务运行,比如说,每 5 分钟运行一次,然后运行以下 artisan 命令:

$schedule->command('queue:work --queue=emails --once')->everyFiveMinutes();

这将从队列中取出一个作业并运行它。 不幸的是,对于处理作业的频率没有更精细的控制。

确切地说,你需要让你的 php 代码进入休眠状态,没有其他办法。

Php睡眠

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM