mcpField
S
symfony-messenger

symfony-messenger

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

关于 symfony-messenger

面向 Symfony Messenger 的开发技能,涵盖异步消息处理、传输路由和 Worker 运维,并强调安全重投、重试与配置验证。

主要功能

  1. 01消息与处理器设计
  2. 02传输选择与路由
  3. 03重试与失败传输配置
  4. 04Worker 运维与限制
  5. 05配置检查与测试

适用场景

  1. 01将耗时任务移出请求
  2. 02把消息路由到异步传输
  3. 03确保处理器可安全重投
  4. 04验证 Worker 与传输配置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill symfony-messenger

安装后在 Claude Code 中输入/symfony-messenger确认已加载。

附带文件reference.md

详细介绍

Symfony Messenger(Symfony)

适用场景

  • 将耗时较长或容易失败的工作从请求中移出,交由消息和 #[AsMessageHandler] 处理器执行。
  • 选择传输方式(Doctrine、Redis、AMQP、sync://、in-memory://),并将消息路由到该传输方式。
  • 使用 messenger:consume 运行、调整工作进程规模并重启工作进程。
  • 确保处理器在消息重新投递时安全。

默认工作流

  1. 将消息创建为普通的 readonly 类,只携带 ID,不携带实体。
  2. 使用 #[AsMessageHandler] 编写处理器,并定义带类型的 __invoke():根据 ID 重新获取数据,跳过已完成的工作。
  3. 使用 #[AsMessage('async')] 或 routing 键路由消息,并在 messenger.yaml 中声明传输 DSN。
  4. 在传输方式上设置 retry_strategy 和 failure_transport。
  5. 使用 messenger:consume async -vv 消费消息,并通过 --limit、--memory-limit 或 --time-limit 设置限制。
  6. 使用 debug:messenger 和 messenger:stats 检查配置,并在测试中使用 in-memory://。

防护措施

  • 传递实体 ID,不要传递 Doctrine 实体:代理和脱管状态无法顺利序列化。
  • 消息至少投递一次:重新投递的消息必须安静地返回,而不是抛出异常。
  • 参考文档将 PriorityStamp、--fetch-size、--no-reset 和 stop_worker_on_signals 标记为 8.1+:请先确认最低版本。
  • 部署时使用 messenger:stop-workers 重启工作进程。

渐进式披露

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

输出要求

  • 消息、其处理器,以及路由和传输配置。
  • 重试和失败传输设置。
  • 工作进程命令,以及能够证明配置正确的 debug:messenger 或 messenger:stats 输出。

参考资料

  • reference.md

评论

支持 Markdown