采坑前景
Jobs 中使用的一個類中存在如下代碼:
$this->source = $this->source ?? $this->getSourceModel($model, $type);
這句的本意是因為 $this->source 在多個地方存在調(diào)用, 但是調(diào)用的順序不一樣, 所以不知道有沒有獲取過對應(yīng) ID 的 Model
問題來了
這個類在其他地方 fpm 中也存在調(diào)用, 但因為 fpm 生命周期的原因, 一直相安無事.
...
但是, 在 Laravel 的 queue 中, 當你使用 php artisan queue:work/ php artisan horizon 運行隊列處理器后, 隊列處理器是一個常駐的進程并且在內(nèi)存中保存著已經(jīng)啟動的應(yīng)用狀態(tài)。因此,它們并不會在啟動后注意到你代碼的更改逝变。
...
隊列處理器常駐內(nèi)存, 所以聲明過的變量, 在下一次隊列執(zhí)行的時候, 依然存在(跟 swoole 同理), 所以上面的代碼中, 第一次 getSourceModel 后 $this->source 就總是為 true
文檔
文檔地址