我已经像这样调度了所有的工作:
$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 中,使用
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
”。根据您的有效负载结构和作业数据中队列名称的实际位置调整代码。