在Laravel 5.3中,我们派发作业到作业队列后,如何获取作业ID?

In Laravel 5.3, how to get the Job ID after we dispatch a job to the job queue?

在Laravel 5.3中,在controller中,我们可以像这样将一个job分派到job queue中:

$job = (new JobClass())->onQueue('queuename');
dispatch($job);

在使用InteractsWithQueue特征的Job class中,在handle函数中,我们可以这样得到Job ID:

$this->job->getJobId();

但是,我想在使用 dispatch($job) 后在我的控制器中获取作业 ID。

如何获取controller中的Job ID?

如果没有这样的功能,我们可以扩展dispatch辅助函数来添加这个功能吗?

dispatch() 函数将 return 作业 ID:

$job = (new JobClass())->onQueue('queuename');
$jobId = dispatch($job);

dd($jobId);

这是一个很老的问题。但也许是谁 google 发现了这个 post。 Laravel 正在作业排队后触发事件。 Illuminate\Queue\Events\JobQueued

您可以为该事件添加一个侦听器并获取几乎所有信息,包括。您的事件侦听器中的数据库 ID。

在您的 EventServiceProvider 中附加您的侦听器。在我的应用程序中,它是 JobQueuedListener 文件

use Illuminate\Queue\Events\JobQueued;

protected $listen = [
        JobQueued::class =>[
            JobQueuedListener::class
        ],

JobQueuedListener 文件中,您现在可以访问事件变量。

public function handle(JobQueued $event)
{
    $this->event  = $event;
    $mainListener = $event->job->class ?? '';
    if ($mainListener == 'App\Listeners\IpBlockedListener') {
        $this->addIdToIpBlockedModel();
    }

    }