簡體   English   中英

延遲從代碼排隊的Laravel Artisan命令

[英]Delay a Laravel Artisan command queued from code

我在Laravel應用程序中從控制器運行Artisan命令。 正如文檔所指定的那樣 ,您可以像這樣排隊:

Artisan::queue('email:send', [
    'user' => 1, '--queue' => 'default'
]);

這會照顧隊列邏輯,在我的情況下,將作業發送到Redis,幾乎立即處理它。

我想推遲這份工作。 通常可以在調用隊列命令時執行此操作

$job = (new SendReminderEmail($user))->delay(60);

$this->dispatch($job);

有沒有辦法加入這些功能,所以我可以延遲我的Artisan命令5分鍾? 我假設有一個簡單的選擇來延遲它。

如果沒有,我可以創建另一個Job類來站在我的控制器和Artisan命令之間,我可以按正常方式排隊並延遲,然后讓Job調用我的Artisan命令。 但這似乎是讓它運作起來的一種非常復雜的方式。 是否有更好的方法來延遲排隊的Artisan命令?

謝謝

由於控制台內核使用“push”對命令進行排隊,因此對於laravel 5.3及更早版本,這是不可能的。

但是,您可以向框架發出拉取請求,以在內核上實現“稍后”調用,該調用可以直接傳遞到隊列的“稍后”函數。

或者只是實現一個工作類,就像你已經說過的那樣。

但是對於您的用例有一個更好的解決方案。 只需使用郵件門面:

Mail::later(5, 'emails.welcome', $data, function ($message) {
    //
});

有關文檔,請參閱https://laravel.com/docs/5.2/mail#queueing-mail

您可以使用計划任務來解決問題,該計划任務將在所需時間內監視要發送的電子郵件。 您還可以使用表格來設置電子郵件變量,如主題,模板,模板變量,發送電子郵件的時間等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM