Laravel 5.5队列调度不起作用

时间:2018-01-09 11:45:54

标签: laravel queue laravel-5.5 dispatch

也许我对Laravel队列的工作没有理解,或者它本身不起作用,我对Laravel Queue / Dispatch的预期行为是,如果从Controller启动调度,调度到队列的代码应该以静默方式执行并在后台。最终用户浏览器不必等待代码执行。

然而,这是我的代码所发生的事情,队列的调度代码在执行时离开浏览器“Spinning ...”。

这是预期的行为吗?代码:

    **Controller:**

    public function make_eps_certs($tbl_eps)
    {
        //dd(Carbon::now()->addMinutes(10))
        Log::info('Dispatching maeEPSCert to Queue');
        $var_result=makeEPSCerts::dispatch($tbl_eps)->onQueue('eventadmin')
            ->delay(10);  
return redirect()->back();
}


    **Job:**

    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;

use App\partSubs;
use Log;

use Image;

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

    /**
     * Create a new job instance.
     *
     * @return void
     */

    protected $passdata;
    public $timeout = 120;

    public function __construct($passdata)
    {
        Log::info('Constructing makeEPSCert');
        $this->passdata = $passdata;
    }

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

    try
        {
        Log::info('Beginning makeEPSCert');
        $tbl_eps=$this->passdata;
    .....

2 个答案:

答案 0 :(得分:2)

LOG_DRIVER中的.env更改为database,然后使用php artisan queue:table创建所需的迁移文件,之后执行php artisan migrate

之后你只需要运行php artisan queue:work --queue="eventadmin"

然后你会认识到预期的行为

可在此处找到更详细的文档:https://laravel.com/docs/5.5/queues

答案 1 :(得分:0)

您可以通过以下方式重试(我假设您在 Laravel 文档中做了说明,但总有一天它不起作用):

第 1 步:删除数据库中的表“jobs”。

第 2 步:在控制台中运行命令 'php artisan migrate' 以再次创建表 'jobs'。

第 3 步:在控制台中运行命令 'php artisan queue:work'

第 4 步:重试您的应用

请注意,在 .env 文件中,您设置了:

QUEUE_CONNECTION=数据库

QUEUE_DRIVER=数据库

P/s:对我有用!