用途:在 Symfony Messenger 中处理消息处理失败,决定重试还是放弃。适用场景包括处理器失败后判断重试/放弃、为传输调优 retry_strategy(max_retries、delay、multiplier、max_delay)、检查/重试/移除失败传输中的消息,以及消息最终失败时告警。
主要能力与默认工作流:1)分类失败,重试无益时用 UnrecoverableMessageHandlingException,原因短暂性时用 RecoverableMessageHandlingException;2)按传输设置 retry_strategy,并把 failure_transport 指向专用队列;3)仅当内置退避不够时实现 RetryStrategyInterface,并通过 retry_strategy.service 注册;4)使处理器幂等,外部调用使用稳定幂等键;5)用 messenger:failed:show 分类处理,再用 messenger:failed:retry 或 messenger:failed:remove;6)订阅 WorkerMessageFailedEvent,仅在 willRetry() 为 false 时告警。
限制与注意:绝不对不可能成功的操作重试,如无效输入或拒付卡;max_retries 保持适度(通常 3-5)并配合指数退避,避免持续冲击故障服务;参考文档标注 retryDelay 与可恢复异常上的 forceRetry 为 8.1+,forceRetry: true 会越过 max_retries,使用前确认版本;messenger:failed:retry 除非加 --force 否则为交互式,先用 -vv 读取消息。输出契约包括各失败模式选用异常类、各传输重试设置与失败传输、失败消息运行手册(show、retry、remove)以及最终失败告警。深度实现细节参见 reference.md。