首页 > 解决方案 > Laravel 队列立即发送而不是延迟并且数据不存储在数据库中

问题描述

我正在尝试通过排队邮件来发送多封电子邮件。我的邮件被立即发送出去,而不是尊重我设置的延迟。

//in controller
SendMailOfficeAssignment::dispatch($email, $fullname, $officeName)->delay(now()->addMinutes(5));

邮寄类:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class OfficeAssignmentNotification extends Mailable
{
    use Queueable, SerializesModels;

    ...
    public function build()
    {
        return $this->markdown('emails.the_mail');
    }
}

创建的工作:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class SendMailOfficeAssignment implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    ...
    public function handle()
    {
        sendMailHelperFunction($this->param1, '\App\Mail\OfficeAssignmentNotification', [$this->param2, $this->param3]);
    }
}

我两个都有

php artisan config:clear
php artisan config:cache

我之前也运行过这个:

php artisan queue:table
php artisan migrate

然而,没有任何东西存储在数据库中。

我也在我的数据库中尝试了这两种方法:

QUEUE_DRIVER=database
QUEUE_CONNECTION=database

标签: phplaravel

解决方案


使用 later() 如下:

$when = now()->addMinutes(10);
SendMailOfficeAssignment::dispatch($email, $fullname, $officeName)
->later($when,"send-mail-job");

推荐阅读