0

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

好的,问题来了

我在 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";
    }
4

1 回答 1

0

您可以查看文档: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));

于 2021-05-16T18:18:38.070 回答