laravel queue & horizon 采坑日记

采坑前景

Jobs 中使用的一个类中存在如下代码:
$this->source = $this->source ?? $this->getSourceModel($model, $type);
这句的本意是因为 $this->source 在多个地方存在调用, 但是调用的顺序不一样, 所以不知道有没有获取过对应 ID 的 Model

问题来了

这个类在其他地方 fpm 中也存在调用, 但因为 fpm 生命周期的原因, 一直相安无事.
...
但是, 在 Laravel 的 queue 中, 当你使用 php artisan queue:work/ php artisan horizon 运行队列处理器后, 队列处理器是一个常驻的进程并且在内存中保存着已经启动的应用状态。因此,它们并不会在启动后注意到你代码的更改。
...
队列处理器常驻内存, 所以声明过的变量, 在下一次队列执行的时候, 依然存在(跟 swoole 同理), 所以上面的代码中, 第一次 getSourceModel  后 $this->source 就总是为 true

文档

文档地址

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容