1

我正在尝试使用 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

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

4

1 回答 1

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 确定哪个处理程序应该处理这个消息。

这显示在此处的文档中。

于 2019-08-13T10:39:04.497 回答