[英]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 代碼進入休眠狀態,沒有其他辦法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.