我在Laravel应用程序中从控制器运行Artisan命令。 As the docs specify,你可以像这样排队:
Artisan::queue('email:send', [
'user' => 1, '--queue' => 'default'
]);
这会照顾队列逻辑,在我的情况下,将作业发送到Redis,几乎立即处理它。
我想推迟这份工作。调用队列命令时你can normally do this:
$job = (new SendReminderEmail($user))->delay(60);
$this->dispatch($job);
有没有办法加入这些功能,所以我可以延迟我的Artisan命令5分钟?我认为有一个简单的选择来推迟它。
如果没有,我可以创建另一个Job类来站在我的控制器和Artisan命令之间,我可以按正常方式排队并延迟,然后让Job调用我的Artisan命令。但这似乎是让它运作起来的一种非常复杂的方式。有没有更好的方法来推迟排队的Artisan命令?
谢谢
答案 0 :(得分:1)
由于控制台内核使用“push”对命令进行排队,因此对于laravel 5.3及更早版本来说这是不可能的。
但是你可以向框架发出一个pull请求来实现对内核的“稍后”调用,这可能只是传递给队列的“稍后”函数。
或者只是实施一个工作类,就像你已经说过的那样。
但是对于您的用例有一个更好的解决方案。 只需使用邮件门面:
StringBuilder sb = new StringBuilder();
sb.append(android.os.Build.MANUFACTURER);
sb.append(" ");
sb.append(android.os.Build.MODEL);
sb.append(" ");
sb.append(android.os.Build.SERIAL);
String unique = sb.toString();
答案 1 :(得分:0)
您可以使用计划任务来解决问题,该计划任务将在所需时间内观看要发送的电子邮件。您还可以使用表格来设置电子邮件变量,如主题,模板,模板变量,发送电子邮件的时间等。