gpt4 book ai didi

php - Laravel 队列和作业类的更改

转载 作者:可可西里 更新时间:2023-11-01 10:53:44 25 4
gpt4 key购买 nike

我有一个使用 redis 和 Laravel (5.1) 队列的项目。

在我们的案例中,在部署之后,特定作业开始失败,导致 redis 中积压了数万个作业。在我的特定作业类中的代码中发现逻辑问题后,部署了一个修复程序,该修复程序还删除了一个类范围的变量。

但是,当类被序列化并存储在 redis 中时,当排队的作业重试时,排队的作业失败,因为 Laravel worker 试图访问现在不存在的类范围变量。我通过将变量放回原位发布进一步部署来解决此问题。

以后如何避免这种情况?有没有办法刷新序列化的作业代码,或者有更好的方法来捕获这种错误? Laravel 在 Redis 中使用的序列化对象方法在排队的项目和我宁愿避免的 Laravel 代码之间创建了依赖关系。

最佳答案

这在很大程度上是一个未记录的问题。最近添加到文档中的内容说明了以下内容,可以通过抛出的异常和模型类 bool 值帮助解决问题:

将 Eloquent 模型注入(inject)作业时,它会在放入队列之前自动序列化,并在处理作业时恢复。但是,如果在作业等待工作人员处理时模型已被删除,您的作业可能会失败并出现 ModelNotFoundException。

为方便起见,您可以通过将作业的 deleteWhenMissingModels 属性设置为 true,选择自动删除缺少模型的作业:

/**
* Delete the job if its models no longer exist.
*
* @var bool
*/
public $deleteWhenMissingModels = true;

在此处阅读相关内容:

https://laravel.com/docs/5.7/queues#ignoring-missing-models

关于php - Laravel 队列和作业类的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49049094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com