为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 无法从 crontab 调度作业

Laravel 无法从 crontab 调度作业

PHP
开心每一天1111 2022-01-14 17:22:24
如果我在控制器排队中使用此代码效果很好 $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 处理作业队列,任何建议都会很棒。
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

您可以通过在作业类上调用静态方法并将作业的构造函数参数传递给该方法来分派作业,如下所示:dispatchdispatch


ReProcessShipment::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));


查看完整回答
反对 回复 2022-01-14
  • 1 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信