Атрибут AsMessageHandler
Атрибут AsMessageHandler вешается на класс
и регистрирует его как обработчик сообщений.
Первым параметром передаётся имя шины, которая
будет вызывать этот обработчик. Вторым параметром
можно указать имя метода, который обрабатывает сообщение.
Синтаксис
#[AsMessageHandler(bus: bus, method: method, priority: priority, handles: handles, fromTransport: fromTransport)]
Пример
Давайте создадим сообщение и обработчик для него:
<?php
namespace AppMessage;
class ArticleMessage
{
public function __construct(
public string $text
) {
}
}
?>
Теперь повесим атрибут AsMessageHandler на класс обработчика:
<?php
namespace AppMessageHandler;
use AppMessageArticleMessage;
use SymfonyComponentMessengerAttributeAsMessageHandler;
#[AsMessageHandler]
class ArticleMessageHandler
{
public function __invoke(ArticleMessage $message): void
{
echo $message->text;
}
}
?>
Результат выполнения кода для сообщения с текстом 'hello':
"hello"
Пример
Давайте укажем имя шины через параметр bus:
<?php
namespace AppMessageHandler;
use AppMessageArticleMessage;
use SymfonyComponentMessengerAttributeAsMessageHandler;
#[AsMessageHandler(bus: 'article.bus')]
class ArticleMessageHandler
{
public function __invoke(ArticleMessage $message): void
{
echo $message->text;
}
}
?>
Результат выполнения кода для сообщения с текстом 'article':
"article"
Пример
Давайте укажем имя метода через параметр method:
<?php
namespace AppMessageHandler;
use AppMessageArticleMessage;
use SymfonyComponentMessengerAttributeAsMessageHandler;
#[AsMessageHandler(method: 'handle')]
class ArticleMessageHandler
{
public function handle(ArticleMessage $message): void
{
echo $message->text;
}
}
?>
Результат выполнения кода для сообщения с текстом 'abcde':
"abcde"
Пример
Давайте зададим приоритет через параметр priority:
<?php
namespace AppMessageHandler;
use AppMessageArticleMessage;
use SymfonyComponentMessengerAttributeAsMessageHandler;
#[AsMessageHandler(priority: 10)]
class ArticleMessageHandler
{
public function __invoke(ArticleMessage $message): void
{
echo $message->text;
}
}
?>
Результат выполнения кода для сообщения с текстом 'user':
"user"
Смотрите также
-
класс
MessageBus,
который отправляет сообщения в шину -
метод
dispatch,
который отправляет сообщение в шину -
параметр
bus,
который задаёт имя шины обработчика -
параметр
method,
который задаёт имя метода обработчика