Symfony Messenger 如何确定哪个处理程序应该处理每种类型的消息?
How does Symfony Messenger determine which handler should handle each type of message?
我正在尝试使用 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
消费者如何知道应该使用哪个处理程序来处理消息?
首先,处理程序 class 应该实现 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。
我正在尝试使用 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
消费者如何知道应该使用哪个处理程序来处理消息?
首先,处理程序 class 应该实现 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。