用途
该技能用于设计 NATS 消息系统的主题(subject)层级结构,使订阅者能够借助通配符高效过滤消息,并兼顾分段顺序、账户级租户隔离与后续扩展路径。它面向消息架构设计,而非服务器配置或客户端代码实现。
主要能力
- 通过访谈确认关键需求:消息模式(pub/sub、request/reply、streaming)、多租户需求、安全需求、持久化需求(JetStream 与核心 NATS)。若涉及迁移现有主题,则先进行反模式审计。
- 提供多种主题层级模式,例如:
- 简单域:
{domain}.{action}.{scope},如orders.created.us-west - 多区域:
{domain}.{action}.{region}.{id},如devices.telemetry.us-east.sensor-456 - 多租户 SaaS:每租户一个账户,主题为
{domain}.{action}.{id} - 共享账户回退:
{tenant}.{domain}.{action}.{id} - 多租户 AI:每租户一个账户,主题为
agents.{action}.{agent-id}.{task-id} - 请求/回复:
{service}.request/{service}.reply - 事件溯源:
{aggregate}.{action}.v{version}.{id}
- 简单域:
- 分段排序规则:从宽泛到具体(域 → 动作 → 范围 → 标识符);低基数在左、高基数在右;标识符或 UUID 不得置于动作之前。
- 规划订阅者通配符路径,例如
orders.>、orders.created.>、orders.created.us-west.>。 - 设计安全模型:优先使用 NATS 账户实现租户隔离,使用导出/导入进行跨账户联邦,仅在共享账户回退或平台聚合场景下在主题中使用租户 ID,区分管理/平台主题与用户操作主题,按服务应用最小权限。
- 设计 JetStream 流:将流、消费者、KV 桶视为账户级资源;每个租户账户内每个域一个流;使用消费者过滤器进行细粒度路由;设置账户与域的保留限制;主题段保持在 4–6 个以内。
- 提供质量校验清单,并给出测试命令示例,如
nats-server -D、nats sub "orders.>"、nats pub "orders.created.us-west.order-123" "test message"、nats stream info orders-stream等。
使用方式
按工作流逐步执行:识别域边界 → 选择模式 → 策略性排序分段 → 规划订阅者路径 → 设计安全模型(如多租户)→ 设计 JetStream 流(如需持久化)→ 校验并输出。输出采用固定模板,包含域概览、主题层级、多租户模型、安全模型、JetStream 流与质量校验。技能附带 5 份参考文档(patterns.md、anti-patterns.md、security.md、jetstream.md、use-cases.md),按需在对应步骤查阅,无需预先全部阅读。
适用场景
- 设计新的 NATS 消息系统
- 规划账户感知的多租户主题隔离
- 组织设备遥测或事件流
- 在微服务间设置请求/回复模式
- 为事件溯源系统定义事件主题结构
- 构建智能体间消息传递的智能体 AI 平台
限制
不适用于:配置 NATS 服务器或集群设置(属于基础设施而非主题设计);编写 NATS 客户端代码或连接逻辑(属于实现而非架构);在 NATS 与其他消息系统之间做技术选型;调试现有 NATS 连接或性能问题。
命名规则
全部小写并使用连字符,如 orders.created;不得使用下划线(orders_created)或混合大小写(Orders.Created);主题段最多 4–6 个。
质量校验清单
- 所有分段遵循从宽泛到具体的顺序(
{domain}.{action}.{scope}.{id}) - 动作/范围段之前不出现 UUID/ID 字段
- 命名一致(全小写、连字符、无下划线)
- 为每个域记录订阅者通配符路径
- 主题深度不超过 6 段
- 多租户边界清晰(每租户账户、共享账户前缀回退或两者兼有)
- 为管理/监控访问定义安全主题
- 无冲突模式(如
orders.created.123与orders.123.created) - 记录高基数决策(为何选择该 ID 位置)