Класс ReceivedStamp
Класс ReceivedStamp представляет собой штамп
(stamp), который Symfony автоматически добавляет
в конверт сообщения в момент его получения из
транспорта. Штамп содержит имя транспорта, из
которого пришло сообщение. Первым параметром
конструктора передаётся имя транспорта в виде
строки. Наличие этого штампа в конверте
сигнализирует, что сообщение было получено
воркером из очереди, а не отправлено напрямую
через шину.
Класс удобно использовать в middleware и обработчиках, когда нужно понять, пришло сообщение синхронно или из асинхронного транспорта.
Синтаксис
new ReceivedStamp(string $transportName)
Пример
Давайте создадим штамп и получим имя транспорта
через метод getTransportName:
<?php
namespace AppService;
use SymfonyComponentMessengerStampReceivedStamp;
class StampService
{
public function handle(): string
{
$stamp = new ReceivedStamp('async');
return $stamp->getTransportName();
}
}
?>
Результат выполнения кода:
"async"
Пример
Давайте проверим наличие штампа в конверте через
метод last:
<?php
namespace AppMessageHandler;
use AppMessageArticleMessage;
use SymfonyComponentMessengerEnvelope;
use SymfonyComponentMessengerStampReceivedStamp;
class ArticleHandler
{
public function __invoke(ArticleMessage $message, Envelope $envelope): void
{
$stamp = $envelope->last(ReceivedStamp::class);
if ($stamp instanceof ReceivedStamp) {
echo $stamp->getTransportName();
} else {
echo 'sync';
}
}
}
?>
Результат выполнения кода при получении из транспорта 'async':
"async"
Пример
Давайте добавим штамп в конверт вручную через
метод with и выведем имя транспорта:
<?php
namespace AppService;
use AppMessageArticleMessage;
use SymfonyComponentMessengerEnvelope;
use SymfonyComponentMessengerStampReceivedStamp;
class EnvelopeService
{
public function handle(): string
{
$envelope = new Envelope(new ArticleMessage());
$envelope = $envelope->with(new ReceivedStamp('async'));
$stamp = $envelope->last(ReceivedStamp::class);
return $stamp->getTransportName();
}
}
?>
Результат выполнения кода:
"async"
Смотрите также
-
класс
Envelope,
который хранит сообщение и его штампы -
метод
last,
который возвращает последний штамп указанного типа -
класс
TransportNamesStamp,
который задаёт имена транспортов для отправки -
класс
RedeliveryStamp,
который хранит информацию о повторной доставке