2

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

我用这个内容创建了一个 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 artisan queue:work 在终端中运行,当我在浏览器中访问基本 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("Jobended"); 永远不会被执行,看起来不错。

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

我已确保满足超时要求

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

谁能帮助理解我在这方面做错了什么?

4

0 回答 0