延迟从代码排队的Laravel Artisan命令

sam*_*les 5 php laravel artisan laravel-queue

我在Laravel应用程序中从控制器运行Artisan命令.正如文档所指定的那样,您可以像这样排队:

Artisan::queue('email:send', [
    'user' => 1, '--queue' => 'default'
]);
Run Code Online (Sandbox Code Playgroud)

这会照顾队列逻辑,在我的情况下,将作业发送到Redis,几乎立即处理它.

我想推迟这份工作.您通常可以在调用队列命令时执行此操作:

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

$this->dispatch($job);
Run Code Online (Sandbox Code Playgroud)

有没有办法加入这些功能,所以我可以延迟我的Artisan命令5分钟?我假设有一个简单的选择来延迟它.

如果没有,我可以创建另一个Job类来站在我的控制器和Artisan命令之间,我可以按正常方式排队并延迟,然后让Job调用我的Artisan命令.但这似乎是让它运作起来的一种非常复杂的方式.是否有更好的方法来延迟排队的Artisan命令?

谢谢

jac*_*omo 1

由于控制台内核使用“push”对命令进行排队,因此这对于 laravel 5.3 及更早版本是不可能的。

\n\n

但是,您可以向框架发出拉取请求,以在内核上实现“稍后”调用,该调用可以直接传递到queue\xc2\xb4s“稍后”函数。

\n\n

或者只是实施一个工作类别,就像您已经说过的那样。

\n\n

但对于您的用例,有一个更好的解决方案。\n只需使用 Mail 外观:

\n\n
Mail::later(5, \'emails.welcome\', $data, function ($message) {\n    //\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅https://laravel.com/docs/5.2/mail#queueing-mail了解文档。

\n