Symfony 6.4 Messenger中#[AsMessageHandler(fromTransport:'sync')]异常问题
问题:Symfony 6.4 Messenger处理器未按fromTransport过滤消息
问题根源
你在services.yaml中给App\MessageHandler\Event目录下的处理器手动添加了messenger.message_handler标签,同时设置autoconfigure: false。这会直接覆盖处理器类上#[AsMessageHandler]属性的配置——手动标签未指定from_transport参数,导致处理器没有绑定到sync传输,会处理来自所有通道的消息。
解决办法
办法1:开启自动配置,让属性生效
修改services.yaml,开启自动配置并移除手动标签,让#[AsMessageHandler]属性的配置被正确解析:
App\MessageHandler\Event\: resource: '../src/MessageHandler/Event' autoconfigure: true
此时处理器上的#[AsMessageHandler(bus: 'bus.event', fromTransport: 'sync')]会自动生成带from_transport: sync参数的处理器标签。
办法2:手动在标签中指定from_transport参数
如果需要保持autoconfigure: false,就在手动标签里补充from_transport参数:
App\MessageHandler\Event\: resource: '../src/MessageHandler/Event' autoconfigure: false tags: [ { name: messenger.message_handler, bus: bus.event, from_transport: sync } ]
注意:该方法会对目录下所有处理器生效,若不同处理器需要绑定不同传输,不建议使用。
办法3:单独配置特定处理器
如果仅需给TestAgentTested处理器指定传输,可拆分服务配置:
# 配置其他处理器 App\MessageHandler\Event\: resource: '../src/MessageHandler/Event' exclude: '../src/MessageHandler/Event/Test/TestAgentTested.php' autoconfigure: false tags: [ { name: messenger.message_handler, bus: bus.event } ] # 单独配置目标处理器 App\MessageHandler\Event\Test\TestAgentTested: autoconfigure: true
验证
运行以下命令查看处理器配置,确认From Transport为sync:
bin/console debug:messenger
内容的提问来源于stack exchange,提问作者eldiablo62
相关产品推荐
相关产品推荐

