Как Symfony Messenger определяет, какой обработчик должен обрабатывать каждый тип сообщения?
Я пытаюсь реализовать обмены в кролике и Symfony, используя компонент Messenger.
Допустим, у нас есть транспорт:
messenger:
transports:
amqp_image_resize:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
options:
exchange:
name: image_resize_ex
type: fanout
queue:
name: image_resize_qu
routing:
'App\MessageBus\Message\Image\Resize': amqp_image_resize
Как потребитель узнает, какой обработчик должен использовать для обработки сообщения?
1 ответ
Решение
Во-первых, класс обработчика должен реализовать Symfony\Component\Messenger\Handler\MessageHandlerInterface
,
Это позволяет Symfony автоматически конфигурировать сервис с соответствующими тегами.
Затем ваш обработчик должен напечатать тип сообщения, который он может обработать. В вашем случае что-то вроде этого:
namespace App\MessageBus\Handler;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
use App\MessageBus\Message\Image\Resize;
class ResizeHandler implements MessageHandlerInterface {
public function __invoke(Resize $message) {
// do your thing
}
}
Интерфейс плюс подсказка типа параметра позволяют Symfony определить, какой обработчик должен обработать это сообщение.
Это показано в документации здесь.