如何延迟 Laravel 作业队列
How to delay Laravel Job Queue
我正在尝试学习 Laravel 中的作业和队列,当我尝试学习新东西时,我总是自己举一个基本示例并尝试更好地理解工作流程。
好的,问题来了
我在 Laravel 中创建了一个作业,正如您在 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-dispatching
您可以执行以下操作:
(new SendEmailJob("This will show after 2 minutes"))->delay(now()->addMinutes(2));
或
SendEmailJob::dispatch("This will show after 2 minutes")->delay(now()->addMinutes(2));
我正在尝试学习 Laravel 中的作业和队列,当我尝试学习新东西时,我总是自己举一个基本示例并尝试更好地理解工作流程。
好的,问题来了
我在 Laravel 中创建了一个作业,正如您在 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-dispatching
您可以执行以下操作: (new SendEmailJob("This will show after 2 minutes"))->delay(now()->addMinutes(2));
或
SendEmailJob::dispatch("This will show after 2 minutes")->delay(now()->addMinutes(2));