SuperAPI AI 工具集

nats-design-subject

智能体与模型

查看项目

更新于 10-16 02:11

技能介绍

用途

该技能用于设计 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 位置)