Symfony Messenger 如何确定应由哪个处理程序处理每种类型的消息?
Posted
技术标签:
【中文标题】Symfony Messenger 如何确定应由哪个处理程序处理每种类型的消息?【英文标题】:How does Symfony Messenger determine which handler should handle each type of message? 【发布时间】: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
消费者如何知道它应该使用哪个处理程序来处理消息?
【问题讨论】:
【参考方案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 上。
【讨论】:
以上是关于Symfony Messenger 如何确定应由哪个处理程序处理每种类型的消息?的主要内容,如果未能解决你的问题,请参考以下文章
Symfony messenger 和 mailer:如何添加 binding_key?
如何在 Symfony Messenger 的中间件上禁用日志“信息”?
如何关闭 symfony messenger 组件的日志记录
在 Symfony Messenger 异步消息处理程序上使用选民/权限的最佳方式? [关闭]