如何获取队列名称?

use*_*149 5 laravel laravel-5 laravel-5.2

我已经像这样派遣了我所有的工作:

$job = (new \App\Jobs\UserJob($user))->onQueue('users');
dispatch($job);
Run Code Online (Sandbox Code Playgroud)

然后,在我的AppServiceProvider.php,我已经把这个事件监听器(文档):

Queue::after(function (JobProcessed $event)
{
    //
});
Run Code Online (Sandbox Code Playgroud)

如何在上面的事件侦听器中获取队列的名称(“用户”)?

我试过了:

Log::info($event->job->getName());
Log::info($event->job->getQueue());
Run Code Online (Sandbox Code Playgroud)

但是这些返回:

[2016-08-17 19:51:19] local.INFO: Illuminate\Queue\CallQueuedHandler@call  
[2016-08-17 19:51:19] local.INFO: default  
Run Code Online (Sandbox Code Playgroud)

小智 -1

在 Laravel 中,使用Queue::after事件监听器时,JobProcessed 事件不提供直接方法来检索队列名称。但是,您可以通过访问侦听器中的基础作业数据来实现此目的。

以下是如何在事件侦听器中获取队列名称的示例Queue::after

    use Illuminate\Queue\Events\JobProcessed;
    use Illuminate\Support\Facades\Log;
    // ...
    Queue::after(function (JobProcessed $event) {
    $payload = $event->job->payload();

    // Extract the data from the payload
    $data = json_decode($payload['data']['command'], true);

    // Check if the job is an instance of your UserJob
    if ($data['command'] === \App\Jobs\UserJob::class) {
        $queueName = $data['data'][0]->queue ?? 'default'; // default is used if the queue name is not present

        Log::info("Queue name: $queueName");
    }
});
Run Code Online (Sandbox Code Playgroud)

在此示例中,我们访问作业负载并从中提取数据。然后,我们检查该作业是否是您的类的实例UserJob并检索队列名称。如果队列名称不存在,则默认为“ default”。根据有效负载的结构和作业数据中队列名称的实际位置调整代码。