关于 symfony-messenger
面向 Symfony Messenger 的开发技能,涵盖异步消息处理、传输路由和 Worker 运维,并强调安全重投、重试与配置验证。
主要功能
- 01消息与处理器设计
- 02传输选择与路由
- 03重试与失败传输配置
- 04Worker 运维与限制
- 05配置检查与测试
适用场景
- 01将耗时任务移出请求
- 02把消息路由到异步传输
- 03确保处理器可安全重投
- 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运行、调整工作进程规模并重启工作进程。 - 确保处理器在消息重新投递时安全。
默认工作流
- 将消息创建为普通的
readonly类,只携带 ID,不携带实体。 - 使用
#[AsMessageHandler]编写处理器,并定义带类型的__invoke():根据 ID 重新获取数据,跳过已完成的工作。 - 使用
#[AsMessage('async')]或routing键路由消息,并在messenger.yaml中声明传输 DSN。 - 在传输方式上设置
retry_strategy和failure_transport。 - 使用
messenger:consume async -vv消费消息,并通过--limit、--memory-limit或--time-limit设置限制。 - 使用
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