如何获取队列名称?

问题描述 投票:0回答:1

我已经像这样调度了所有的工作:

$job = (new \App\Jobs\UserJob($user))->onQueue('users');
dispatch($job);

然后,在我的

AppServiceProvider.php
中,我放置了这个事件监听器(docs):

Queue::after(function (JobProcessed $event)
{
    //
});

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

我已经尝试过:

Log::info($event->job->getName());
Log::info($event->job->getQueue());

但是这些返回:

[2016-08-17 19:51:19] local.INFO: Illuminate\Queue\CallQueuedHandler@call  
[2016-08-17 19:51:19] local.INFO: default  
laravel laravel-5
1个回答
0
投票

在 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");
    }
});

在此示例中,我们访问作业负载并从中提取数据。然后,我们检查该作业是否是您的

UserJob
类的实例并检索队列名称。如果队列名称不存在,则默认为“
default
”。根据您的有效负载结构和作业数据中队列名称的实际位置调整代码。

© www.soinside.com 2019 - 2024. All rights reserved.