如果我在控制器排队中使用此代码效果很好 $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));
- 1 回答
- 0 关注
- 164 浏览
添加回答
举报
0/150
提交
取消