Php Laravel timedout队列作业未在作业类中触发失败的方法
我已经建立了一个基本的laravel项目,包括最小配置、mysql数据库、数据库队列等 我创建了一个包含此内容的作业类Php Laravel timedout队列作业未在作业类中触发失败的方法,php,laravel,laravel-5.5,laravel-queue,Php,Laravel,Laravel 5.5,Laravel Queue,我已经建立了一个基本的laravel项目,包括最小配置、mysql数据库、数据库队列等 我创建了一个包含此内容的作业类 <?php namespace App\Jobs; use Exception; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\Sho
<?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");
}
}
我有一个php artisan队列:工作在终端中运行,当我在浏览器中访问基本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(“作业结束”);永远不会被处决,这看起来很好
但是,我想知道,为什么失败的事件没有被调用
我已确保满足超时的要求
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
谁能帮助我理解我在这件事上做错了什么 基本上,作业没有失败(没有发生未处理的异常或错误)。您可以使用“$this->attempts()”获取尝试次数,但我不知道您是否可以知道以前的作业是否有错误though@ka_lin你的意思是说,除非我在作业类的执行中抛出异常,否则不会调用失败的方法?您有什么建议吗:)如何针对作业的执行时间和超时值进行失败的方法调用?如果超过
$maxTries
,则应该失败,除非它是0@AlexBlex当$trys超过提供的值时,它调用failed方法,我认为$timeout的行为也一样。
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