首页 文章

使Laravel使用数据库队列而不是同步

提问于
浏览
1

如果有人可以帮助我,我需要Laravel Queues的帮助,到目前为止我已经完成了这些步骤

  • 将.env文件中的QUEUE DRIVER更改为数据库

  • 为队列表作业和失败作业创建了迁移

php artisan queue:table
php artisan queue:failed-table

我已经运行了php artisan migrate

  • 创建了一个新的Job
php artisan make:job SendNewArticleNotification

更新:

好的,我已经创建了一个路由/队列

Route::get('/queue', function () {

    dispatch(new \App\Jobs\SendNewArticleNotification);

});

在我的工作SendNewArticleNotification我有这个

<?php

namespace App\Jobs;

use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendNewArticleNotification implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {

        $users = User::all();

        $article = \App\Article::first();

        foreach ($users as $user) {
            $user->notify(new \App\Notifications\Published($article));
        }    


    }
}

当我点击我的/队列路线时,电子邮件正在发送,但他们没有使用数据库表....发送50封邮件需要超过30秒...

UPDATE

好吧,我终于弄明白,dispatch()需要在控制器方法内部,因为控制器具有trait调度作业....现在我的作业在DB表作业中排队....所以我如何触发他们在幕后?

1 回答

  • 2

    将调度放入控制器方法然后运行

    php artisan queue:work
    

相关问题