如何延迟Laravel作业队列



我正在尝试了解Laravel中的Jobs和队列,当我尝试学习新东西时,我总是自己举一个基本的例子,并尝试更好地理解工作流。

好的,这是的问题

我在Laravel中创建了一个Job,正如你在handle方法中看到的那样,我只是想在Laravel.logger上打印一条简单的消息,这完全可以。

class SendEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

protected $email;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($email)
{
$this->email = $email;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Log::info($this->email . '<<<<<<<<<<<<<<<');
}
}

我的问题是,我想把这项工作推迟2分钟,然后再发送它,我尝试过这种方法,但没有成功,当调用索引方法时,两个日志都会立即打印,但我希望$job = new SendEmailJob("This will show after 2 minutes");在2分钟后被调用,而不是立即打印

public  function  index(){

$on = Carbon::now()->addMinutes(2);
Log::info('Test');
$job = new SendEmailJob("This will show after 2 minutes");
$job->delay($on);
dispatch($job);

return "none";
}

您可以查看文档:https://laravel.com/docs/8.x/queues#delayed-调度

您可以执行以下操作:
(new SendEmailJob("This will show after 2 minutes"))->delay(now()->addMinutes(2));
SendEmailJob::dispatch("This will show after 2 minutes")->delay(now()->addMinutes(2));

最新更新