Класс SerializerStamp
Класс SerializerStamp добавляется в Envelope сообщения
и хранит массив контекста сериализации. Этот контекст передаётся
сериализатору при отправке сообщения в транспорт и при его
получении из очереди. Первым параметром конструктор принимает
массив context с настройками сериализатора.
Синтаксис
new SerializerStamp(array $context = [])
Пример
Давайте создадим сообщение и добавим в конверт штамп сериализации:
<?php
namespace App\Message;
class ArticleMessage
{
public function __construct(
public string $title = 'article',
) {
}
}
?>
Теперь отправим это сообщение в шину с нужным контекстом:
<?php
namespace App\Controller;
use App\Message\ArticleMessage;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\SerializerStamp;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(MessageBusInterface $bus): Response
{
$message = new ArticleMessage('abcde');
$envelope = new Envelope($message);
$envelope = $envelope->with(new SerializerStamp([
'groups' => ['article:write'],
]));
$bus->dispatch($envelope);
return new Response('hello');
}
}
?>
Результат выполнения кода:
hello
Пример
Давайте получим штамп из конверта после отправки:
<?php
namespace App\Controller;
use App\Message\ArticleMessage;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Stamp\SerializerStamp;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
$message = new ArticleMessage('abcde');
$envelope = new Envelope($message);
$envelope = $envelope->with(new SerializerStamp([
'groups' => ['article:write'],
]));
$stamp = $envelope->last(SerializerStamp::class);
$res = $stamp->getContext();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
{"groups":["article:write"]}
Смотрите также
-
класс
Envelope,
который оборачивает сообщение и хранит штампы -
метод
with,
который добавляет штамп в конверт -
метод
last,
который возвращает последний штамп указанного типа -
класс
DelayStamp,
который задаёт задержку перед обработкой сообщения