Как 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 определить, какой обработчик должен обработать это сообщение.

Это показано в документации здесь.

Другие вопросы по тегам