使用Laravel 5.5,我有一个名为JobEventSubscriber
的侦听器正在使用数据库队列。它有一个名为uploadFileToPartner
的方法,只要触发JobFilesUploaded
事件就会触发该方法。
以下是我订阅方法的代码:
public function subscribe($events){
$events->listen(JobSaved::class, JobEventSubscriber::class . '@syncToCrm');
$events->listen(JobFilesUploaded::class, JobEventSubscriber::class . '@uploadFileToPartner');
}
每当这些事件中的任何一个触发时,数据库监听器都会失败,并显示以下错误:
ErrorException: call_user_func_array() expects parameter 1 to be a valid callback,
class 'App\Listeners\JobEventSubscriber' does not have a method 'uploadFileToPartner'
in /var/www/html/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php:79
当我将queue_driver
更改为sync
时,它有效。我也进了Tinker并打字:
>>> use App\Listeners\JobEventSubscriber
>>> $eventSubscriber = app(JobEventSubscriber::class);
=> App\Listeners\JobEventSubscriber {#879
+connection: "database",
}
>>> method_exists($eventSubscriber, 'uploadFileToPartner');
=> true
这里有什么错误,它找不到绝对存在的方法。
可能有必要提一下,我最近从Larvel 5.4更新了这个应用程序。
答案 0 :(得分:0)
在阅读the docs后,它说如果您更改了代码,则需要重新启动队列流程。
具体说:
请记住,队列工作程序是长期存在的进程,并将引导的应用程序状态存储在内存中。因此,他们在启动后不会注意到代码库中的更改。因此,在部署过程中,请务必重新启动队列工作程序。
我更改了方法的名称,然后我没有重新启动队列。因此队列正在接收具有新名称的事件,但它正在执行旧代码。因此,方法名称无法识别。