0%

Laravel Queue 修改之后不生效的坑

其实官方文档有说,只是没看仔细。

正常情况下,修改 php 代码是不用重启什么东西的,

但是 Laravel 中的 job 不一样,

如果不用 php artisan queue:restart,新 dispatchjob 跑的还会是原来的代码。

也就是说,如果发现 jobbug,改了之后可能不会生效,除非有重启过队列。

如果使用 supervisor,可以使用 supervisor restart xxx 来进行重启。

个人觉得原因是,运行 php artisan queue:workphp artisan queue:listen 之后,

内存中的代码是运行时候的代码,是常驻内存的,

job 的保存是序列化保存的,在 队列运行到对应的 job 的时候,反序列化出来的还是旧驻留内存的 job

所以,队列有些奇怪的 bug 发生的时候,或者修改过代码之后,需要重启一下队列。