猿问

Laravel 无法从 crontab 调度作业

如果我在控制器排队中使用此代码效果很好


 $job=(new ReProcessShipment($single_data->request_data))->delay(2);

 $this->dispatch($job);

但在 crontab 错误中使用相同的代码


方法 App\Console\Commands\AddPreProcess::dispatch 不存在。{"exception":"[object] (BadMethodCallException(code: 0):

Method App\Console\Commands\AddPreProcess::dispatch 不存在。


试图像使用它一样


 $job=(new ReProcessShipment($single_data->request_data))->delay(2);

 ReProcessShipment::dispatch($job);

然后得到错误


类 App\Jobs\ReProcessShipment 的对象无法转换为字符串 {"exception":"[object] (ErrorException(code: 0): 类 App\Jobs\ReProcessShipment 的对象无法转换为字符串


我无法从 cronjob 处理作业队列,任何建议都会很棒。


开心每一天1111
浏览 165回答 1
1回答

慕村225694

您可以通过在作业类上调用静态方法并将作业的构造函数参数传递给该方法来分派作业,如下所示:dispatchdispatchReProcessShipment::dispatch($single_data->request_data)->delay(2);确保您使用Illuminate\Foundation\Bus\Dispatchabletrait 能够调用dispatch作业类,例如:use Illuminate\Foundation\Bus\Dispatchable;class ProcessPodcast implements ShouldQueue{    use Dispatchable, ...如果您查看源代码,您会发现静态dispatch函数使用作业的参数为您创建作业,因此您无需在调度作业之前创建作业。这是dispatch函数的来源:public static function dispatch(){    return new PendingDispatch(new static(...func_get_args()));}所以它本质上改变了这个:ReProcessShipment::dispatch($single_data->request_data);进入这个:new PendingDispatch(new ReProcessShipment($single_data->request_data));
随时随地看视频慕课网APP
我要回答