You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:35:12