已失败的工作
最后更新于:2022-04-01 15:09:47
事情往往不会如你预期的一样,有时候你推送工作到队列会失败,别担心,Laravel 包含一个简单的方法去指定一个工作最多可以被执行几次,在工作被执行到一定的次数时,他将会添加至 `failed_jobs` 数据表里,然后失败工作的数据表名称可以在 `config/queue.php` 里进行设置:
要产生一个迁移来建立 `failed_jobs` 数据表,你可以使用
`queue:failed-table Artisan` 命令:
~~~
php artisan queue:failed-table
~~~
你可以指定一个最大值来限制一个工作应该最多被执行几次,在你执行 `queue:listen` 时加上 `--tries`:
~~~
php artisan queue:listen connection-name --tries=3
~~~
假如你会想注册一个事件,这个事件会将会在队列失败时被调用,你可以使用 `Queue::failing` 方法,这个事件是一个很好的机会让你可以通知你的团队通过 `e-mail` 或 `HipChat`。
~~~
Queue::failing(function($connection, $job, $data)
{
//
});
~~~
你可能够直接在队列工作类别中定义一个 `failed` 方法,这让你能够在工作失败时候,执行一些特定的动作:
~~~
public function failed()
{
// 当工作失败的时候会被调用……
}
~~~
## 重新尝试失败的工作
要看到所有失败的工作,你可以使用 `queue:failed` 命令:
~~~
php artisan queue:failed
~~~
这个 `queue:failed` 命令将会列出工作 ID、连接、队列名称及失败的时间,可以使用工作 ID 重新执行一个失败的工作,例如一个已经失败的工作的 ID 是 5,我们可以使用下面的命令:
~~~
php artisan queue:retry 5
~~~
假如你想删除一个失败的工作,可以使用 `queue:forget` 命令:
~~~
php artisan queue:forget 5
~~~
要删除全部失败的工作,可以使用 `queue:flush` 命令:
~~~
php artisan queue:flush
~~~