Метод getMetadata класса Worker
Метод getMetadata класса Worker возвращает
ассоциативный массив с метаданными текущего воркера.
Метаданные содержат информацию о состоянии воркера:
идентификатор транспорта, имя транспорта, количество
обработанных сообщений и признак завершения работы.
Метод не принимает параметров и возвращает массив.
Синтаксис
public function getMetadata(): array
Пример
Давайте создадим воркер и получим его метаданные:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
use Symfony\Component\Messenger\Worker;
use Symfony\Component\Routing\Attribute\Route;
class WorkerController extends AbstractController
{
#[Route('/worker/metadata', name: 'worker_metadata')]
public function index(ReceiverInterface $receiver): Response
{
$worker = new Worker([$receiver], new \Symfony\Component\Messenger\MessageBus());
$metadata = $worker->getMetadata();
return new Response(json_encode($metadata));
}
}
?>
Результат выполнения кода:
{"transportNames":["async"],"queueNames":["default"],"messagesProcessed":0,"stopped":false}
Пример
Давайте получим метаданные после остановки воркера:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
use Symfony\Component\Messenger\Worker;
use Symfony\Component\Routing\Attribute\Route;
class WorkerController extends AbstractController
{
#[Route('/worker/metadata/stopped', name: 'worker_metadata_stopped')]
public function stopped(ReceiverInterface $receiver): Response
{
$worker = new Worker([$receiver], new \Symfony\Component\Messenger\MessageBus());
$worker->stop();
$metadata = $worker->getMetadata();
return new Response(json_encode($metadata));
}
}
?>
Результат выполнения кода:
{"transportNames":["async"],"queueNames":["default"],"messagesProcessed":0,"stopped":true}