ramstad/queue-validator

Laravel 5.3 的队列验证器

dev-master 2017-05-01 20:57 UTC

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 分钟旧且尚未处理的队列。

待办事项

  • 添加命令以重试丢失的队列(与失败的作业不同,它完全重新分发作业,而不是使用序列化的作业类)。
  • 创建丢失作业的通知。
  • 添加额外的功能到作业中,以允许完全验证作业。而不仅仅是检查队列是否运行它,还可以确保它执行了所需的操作(如果它创建文件,则检查它是否存在等)。

注意

这远非完美的解决方案,可能还有更好的方法来帮助处理队列问题,希望在某一天这个包变得不再需要。删除此包或保留它不应对您的应用程序产生任何问题。