【问题标题】:How does Symfony Messenger determine which handler should handle each type of message?Symfony Messenger 如何确定应由哪个处理程序处理每种类型的消息?
【发布时间】:2019-12-19 20:52:44
【问题描述】:

我正在尝试使用 Messenger 组件在 rabbit 和 Symfony 中实现交换。

假设我们有交通工具:

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

消费者如何知道它应该使用哪个处理程序来处理消息?

【问题讨论】:

    标签: php symfony symfony4 symfony-messenger


    【解决方案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
       }
    
    }
    

    接口加上参数 type-hint 允许 Symfony 决定哪个处理程序应该处理这个消息。

    这显示在文档here 上。

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多