Параметр fromTransport атрибута AsMessageHandler
Параметр fromTransport атрибута AsMessageHandler
задаёт имя транспорта, из которого должно быть получено
сообщение. Если сообщение приходит из другого транспорта,
обработчик не будет вызван. Это позволяет одному и тому же
классу сообщения иметь разные обработчики для разных
транспортов.
Синтаксис
#[AsMessageHandler(fromTransport: transport)]
Пример
Давайте создадим сообщение и обработчик, который принимает
только сообщения из транспорта async:
<?php
namespace App\Message;
class ArticleMessage
{
public function __construct(
public string $text,
) {
}
}
?>
<?php
namespace App\MessageHandler;
use App\Message\ArticleMessage;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
#[AsMessageHandler(fromTransport: 'async')]
class ArticleMessageHandler
{
public function __invoke(ArticleMessage $message): void
{
echo $message->text;
}
}
?>
Если отправить сообщение в транспорт async, обработчик
будет вызван и выведет текст сообщения:
"abcde"
Пример
Давайте создадим два обработчика для одного сообщения:
один принимает сообщения из транспорта async,
а второй - из транспорта sync:
<?php
namespace App\Message;
class UserMessage
{
public function __construct(
public string $name,
) {
}
}
?>
<?php
namespace App\MessageHandler;
use App\Message\UserMessage;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
#[AsMessageHandler(fromTransport: 'async')]
class AsyncUserMessageHandler
{
public function __invoke(UserMessage $message): void
{
echo 'async: ' . $message->name;
}
}
?>
<?php
namespace App\MessageHandler;
use App\Message\UserMessage;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
#[AsMessageHandler(fromTransport: 'sync')]
class SyncUserMessageHandler
{
public function __invoke(UserMessage $message): void
{
echo 'sync: ' . $message->name;
}
}
?>
Если отправить сообщение в транспорт async, будет
вызван первый обработчик:
"async: user"
Если отправить сообщение в транспорт sync, будет
вызван второй обработчик:
"sync: user"
Смотрите также
-
атрибут
AsMessageHandler,
который помечает класс как обработчик сообщений -
параметр
handles,
который задаёт тип обрабатываемого сообщения -
параметр
priority,
который задаёт приоритет обработчика -
класс
TransportNamesStamp,
который задаёт транспорты для конкретного сообщения