关于 messenger-retry-failures
面向 Symfony 开发的技能,涵盖 Messenger 失败处理,包括重试决策、传输配置和失败消息排查。还涉及幂等处理器及最终失败告警。
主要功能
- 01区分暂时性与永久性失败
- 02按传输配置重试策略
- 03将失败消息路由至专用队列
- 04确保处理器幂等
- 05检查、重试或移除失败消息
- 06对最终失败发送告警
适用场景
- 01为失败的处理器设定重试行为
- 02排查失败传输中的消息
- 03在消息不再重试时发送告警
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill messenger-retry-failures安装后在 Claude Code 中输入/messenger-retry-failures确认已加载。
附带文件reference.md
详细介绍
Messenger 重试失败(Symfony)
使用场景
- 处理程序失败,需要决定是重试还是放弃。
- 调整传输的
retry_strategy(max_retries、delay、multiplier、max_delay)。 - 检查、重试或移除失败传输中的消息。
- 消息最终失败时发出警报。
默认工作流
- 对每次失败进行分类:重试无济于事时使用
UnrecoverableMessageHandlingException,原因具有暂时性时使用RecoverableMessageHandlingException。 - 为每个传输设置
retry_strategy,并将failure_transport指向专用队列。 - 仅当内置退避机制不够用时才实现
RetryStrategyInterface,并通过retry_strategy.service注册。 - 确保处理程序具备幂等性,并为外部调用使用稳定的幂等键。
- 使用
messenger:failed:show进行分类处理,然后使用messenger:failed:retry或messenger:failed:remove。 - 订阅
WorkerMessageFailedEvent,仅在willRetry()返回 false 时发出警报。
防护措施
- 绝不重试不可能成功的操作,例如无效输入或被拒绝的银行卡。
- 将
max_retries设得适中(通常为 3-5 次),并采用指数退避,避免持续轰击故障服务。 - 参考文档将可恢复异常上的
retryDelay和forceRetry标记为 8.1+;forceRetry: true会突破max_retries限制:依赖这些功能前请先确认版本。 messenger:failed:retry默认会交互式运行,除非使用--force:请先通过-vv查看消息。
渐进式披露
- 使用此文件了解执行方式和风险控制。
- 需要深入了解实现细节时,请打开参考资料。
输出约定
- 为处理程序的每种失败模式选择的异常类。
- 每个传输的重试设置,以及失败传输。
- 失败消息的操作手册(查看、重试、移除)以及最终失败时的警报。
参考资料
reference.md
评论
支持 Markdown