mcpField
M
messenger-retry-failures

messenger-retry-failures

github.com/dev-toolings开发22787 次安装3 周前更新
代码仓库

关于 messenger-retry-failures

面向 Symfony 开发的技能,涵盖 Messenger 失败处理,包括重试决策、传输配置和失败消息排查。还涉及幂等处理器及最终失败告警。

主要功能

  1. 01区分暂时性与永久性失败
  2. 02按传输配置重试策略
  3. 03将失败消息路由至专用队列
  4. 04确保处理器幂等
  5. 05检查、重试或移除失败消息
  6. 06对最终失败发送告警

适用场景

  1. 01为失败的处理器设定重试行为
  2. 02排查失败传输中的消息
  3. 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)。
  • 检查、重试或移除失败传输中的消息。
  • 消息最终失败时发出警报。

默认工作流

  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 查看消息。

渐进式披露

  • 使用此文件了解执行方式和风险控制。
  • 需要深入了解实现细节时,请打开参考资料。

输出约定

  • 为处理程序的每种失败模式选择的异常类。
  • 每个传输的重试设置,以及失败传输。
  • 失败消息的操作手册(查看、重试、移除)以及最终失败时的警报。

参考资料

  • reference.md

评论

支持 Markdown