簡體   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