如何延迟 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));