首页 > 解决方案 > Laravel 队列 - 作业之间暂停

问题描述

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

对于队列侦听器,sleep option 选项仅确定如果没有可用的新作业,worker 将“睡眠”多长时间。因此,只有在队列中没有任何内容时它才会休眠。

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

[编辑] 我刚刚使用 FIFO 和标准 AWS SQS 队列测试了 sleep 方法,这弄乱了整个队列。突然工作(成功)重新提交了 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);


}
}

标签: phplaravellaravel-5queueamazon-sqs

解决方案


没错,你需要让你的 php 代码休眠,没有别的办法。

php 睡眠


推荐阅读