ramstad / queue-validator
Laravel 5.3 的队列验证器
Requires
- laravel/framework: 5.4.*
This package is auto-updated.
Last update: 2024-09-13 06:07:11 UTC
README
看起来以下 PL 实现的更改比此包提供的好。5.3 的最新版本(不确定具体版本)将覆盖此包试图解决的问题。 laravel/framework#16212
Queue Validator for Laravel 5.3
在 Laravel 5.3 中遇到队列问题?此包旨在帮助减轻丢失作业造成的任何损害。
工作原理
此包将为发送到队列的作业添加一个表,该表将发送任何作业数据。由于正确的验证可能因类而异,因此此功能可按作业类进行配置。稍后会更详细地介绍。
一旦队列完成,它将从数据库中删除记录。这可能看起来就像是在使用数据库驱动器,但这更像是一个日志。如果记录已添加但从未被删除(即使在运行失败的作业之后),则可以假设出错了。
由于这可以有效地备份与队列相关的所有数据,因此它可以像处理失败的作业一样使用。然而,之所以要对每个作业进行可配置,是因为有时作业类本身存在错误。这意味着即使队列尝试运行它,它甚至无法初始化它。这允许使用用于生成作业的原始数据,而不是序列化版本。
安装
首先将服务提供程序添加到您的应用程序配置中。
Ramstad\QueueValidator\QueueValidatorServiceProvider::class
然后,对于您想要验证的每个作业,您需要添加一个额外的特质。
use Ramstad\QueueValidator\ValidatesQueue;
class SomeJob implements ShouldQueue
{
use ValidatesQueue;
}
此操作使用作业的 queue()
函数,因此如果您出于其他原因使用该函数,则此操作可能不适用于您。
您还需要在初始化作业时添加一些额外的字段。
class SomeJob implements ShouldQueue
{
use ValidatesQueue;
protected $related_class;
protected $related_id;
protected $related_data;
public function __construct(SomeModelClass $model, $fields)
{
$this->related_class = SomeModelClass::class;
$this->related_id = $model->id;
$this->related_data = [
'fields' => $fields
];
}
}
用法
目前只有一个方法可以检查队列日志表
php artisan queue:check
这将输出已丢失的作业列表,因为这些作业可能仍在处理,因此默认情况下检查它们是否比 5 分钟旧。
只需在末尾添加一个数字即可调整时间。
php artisan queue:check 10
将检查任何比 10 分钟旧且尚未处理的队列。
待办事项
- 添加命令以重试丢失的队列(与失败的作业不同,它完全重新分发作业,而不是使用序列化的作业类)。
- 创建丢失作业的通知。
- 添加额外的功能到作业中,以允许完全验证作业。而不仅仅是检查队列是否运行它,还可以确保它执行了所需的操作(如果它创建文件,则检查它是否存在等)。
注意
这远非完美的解决方案,可能还有更好的方法来帮助处理队列问题,希望在某一天这个包变得不再需要。删除此包或保留它不应对您的应用程序产生任何问题。