Laravel timedout排队的工作没有在工作班中解雇失败的方法

时间:2017-10-05 11:05:52

标签: php laravel laravel-5.5 laravel-queue

我已经建立了一个基本的laravel项目,配置最少,mysql数据库,数据库队列等。

我使用此内容创建了一个Job类

<?php

namespace App\Jobs;

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

class TestJob implements ShouldQueue
{

    public $timeout = 10;

    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        \Log::info("Job started");
        sleep(12);
        \Log::info("Job ended");
    }

    public function failed(Exception $exception){
        \Log::info("Job failed");
    }
}

为了简单起见,我在这条路线上发起了这个事件。

Route::get('/', function () {
    dispatch(new \App\Jobs\TestJob());
    return view('welcome');
});

我有php工匠队列:在终端中运行工作,当我在浏览器中访问基本URL路由时,作业排队。

我得到这个作为queue:work命令的输出。

ajeesh@mymachine:/var/www/html/queue$ php artisan queue:work
[2017-10-05 10:28:43] Processing: App\Jobs\TestJob
Killed

当我检查日志文件时,

ajeesh@mymachine:/var/www/html/queue/storage/logs$ tail laravel.log 
[2017-10-05 10:28:43] local.INFO: Job started  

它只有这个内容。

因为它会在10秒后超时\ Log :: info(&#34;作业结束&#34;);从来没有被执行看起来很好。

但是,我想知道,为什么失败的事件不会被调用。

我确保满足超时要求

ajeesh@mymachine:/var/www/html/queue$ php -v
PHP 7.1.10-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Sep 29 2017 17:04:25) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.10-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies

ajeesh@mymachine:/var/www/html/queue$ php -m | grep pcntl
pcntl

任何人都可以帮助理解我在这方面做错了什么吗?

0 个答案:

没有答案