Класс TransportNamesStamp
Класс TransportNamesStamp является штампом (Stamp) для конверта
Envelope
в компоненте Messenger. Он позволяет явно указать имена транспортов,
в которые должно быть отправлено сообщение, игнорируя маршрутизацию,
заданную в конфигурации. Первым параметром конструктор принимает
массив имён транспортов.
Синтаксис
public function __construct(array $transportNames)
Пример
Давайте отправим сообщение в транспорт 'async', используя штамп:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\TransportNamesStamp;
class MessageController extends AbstractController
{
public function send(MessageBusInterface $bus): Response
{
$bus->dispatch(new MyMessage('hello'), [
new TransportNamesStamp(['async'])
]);
return new Response('sent');
}
}
?>
Результат выполнения кода:
"sent"
Пример
Давайте отправим сообщение сразу в несколько транспортов:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Stamp\TransportNamesStamp;
class MessageController extends AbstractController
{
public function send(): Response
{
$envelope = new Envelope(new MyMessage('abcde'));
$envelope = $envelope->with(new TransportNamesStamp(['async', 'sync']));
$names = $envelope->last(TransportNamesStamp::class)->getTransportNames();
return new Response(implode(', ', $names));
}
}
?>
Результат выполнения кода:
"async, sync"
Смотрите также
-
класс
Envelope,
который оборачивает сообщение и штампы -
метод
with,
который добавляет штамп в конверт -
метод
last,
который возвращает последний штамп указанного типа -
класс
BusNameStamp,
который указывает имя шины для обработки