首页 > 解决方案 > Laravel 调度队列总是在中间运行

问题描述

我正在尝试将 Laravel 中的作业分派到 mysql 中。如果我做

调度(新发送广播短信());

或者

SendBroadcastSMS::dispatch()->delay(now()->addMinutes(2));

作业始终在中间运行。在我的工作中,我设置为睡眠 30 秒,并且我当前调用调度的控制器/页面也等待 30 秒并回显工作返回。为什么?它应该通过工人在后台运行,对吗?还是我对 laravel 队列有误解?

我的工作如下:

<?php

namespace App\Jobs;

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

class SendBroadcastSMS implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct()
    {
    }
    public function handle()
    {
        sleep(30);
        echo "test";
//       dd($this->sendSms("6281517777767","test message"));
        //
    }
}

我的队列驱动程序是数据库 mysql,我也没有收到job表中的任何行

QUEUE_DRIVER=数据库

标签: laravelqueuedispatch

解决方案


QUEUE_DRIVER不是您应该在.env文件中设置的属性。
正确的属性是QUEUE_CONNECTION

QUEUE_CONNECTION=database

推荐阅读