同步调度作业时,会抛出异常:
Unresolvable dependency resolving [Parameter #0 [ <required> $app ]] in class Illuminate\Support\ServiceProvider
仅当作业失败时才会出现此异常。 删除“可排队”特性可以解决此问题,但我需要同步并在队列中运行此作业。
在以前的 Laravel 版本中它可以工作。
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SomeJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private array $data;
/**
* Create a new job instance.
*
* @param array $data
*/
public function __construct( array $data = [] )
{
$this->data = $data;
}
/**
* Execute the job.
*/
public function handle(): void
{
// ...
$this->fail();
}
}
SomeJob::dispatch($data); // OK
SomeJob::dispatchSync($data) // Exception :((
我已经弄清楚了。 原因是
AppServiceProvider
类 boot
方法中的以下行:
Queue::failing([ AppServiceProvider::class, 'handleFailedJob' ]);
指的是这个方法:
public static function handleFailedJob(JobFailed $event)
{
// ..
}