Класс BusNameStamp
Класс BusNameStamp - это штамп (stamp) очереди
Symfony, который вешается на конверт сообщения
Envelope и хранит имя шины, которая должна
обработать это сообщение. Первым параметром в
конструктор передаётся строка с именем шины.
При диспетчеризации MessageBus проверяет этот
штамп и направляет сообщение именно в указанную шину.
Синтаксис
new BusNameStamp(string $busName)
Пример
Давайте создадим штамп с именем шины 'command.bus' и
прочитаем его значение через метод getBusName:
<?php
namespace AppMessage;
use SymfonyComponentMessengerStampBusNameStamp;
$stamp = new BusNameStamp('command.bus');
echo $stamp->getBusName();
?>
Результат выполнения кода:
"command.bus"
Пример
Давайте добавим штамп к конверту через метод
with и затем извлечём его методом last:
<?php
namespace AppMessage;
use SymfonyComponentMessengerEnvelope;
use SymfonyComponentMessengerStampBusNameStamp;
$envelope = new Envelope(new SendEmailMessage());
$envelope = $envelope->with(new BusNameStamp('command.bus'));
$stamp = $envelope->last(BusNameStamp::class);
echo $stamp->getBusName();
?>
Результат выполнения кода:
"command.bus"
Пример
Давайте посмотрим, как штамп помогает при диспетчеризации
сообщения в нужную шину через MessageBus:
<?php
namespace AppMessage;
use SymfonyComponentMessengerEnvelope;
use SymfonyComponentMessengerMessageBusInterface;
use SymfonyComponentMessengerStampBusNameStamp;
class Sender
{
public function __construct(
private MessageBusInterface $messageBus,
) {
}
public function send(object $message): Envelope
{
$envelope = new Envelope($message);
$envelope = $envelope->with(new BusNameStamp('command.bus'));
return $this->messageBus->dispatch($envelope);
}
}
?>
После вызова метода dispatch сообщение будет
обработано шиной с именем 'command.bus'.
Смотрите также
-
класс
MessageBus,
который диспетчеризует сообщения -
класс
Envelope,
который хранит сообщение и его штампы -
класс
TransportNamesStamp,
который задаёт транспорты для отправки -
класс
HandledStamp,
который помечает обработанное сообщение