跳到主要内容

Registry 注册表

Monoceros 里很多系统都遵循同一套思路:先注册,再通过 ID 获取,再按 ID 卸载或重载。

这背后依赖的就是统一的 Registry<T> 注册表接口。

哪些系统在用注册表

系统典型注册对象
脚本系统脚本定义
分发器分发器定义
调度系统调度定义
工作流动作节点、属性访问器
扩展系统扩展实例
命令系统命令定义、补全器
类型转换Applicative

注册表提供了什么能力

这类系统通常都会支持:

  • register:注册一个对象
  • unregister:卸载一个对象
  • get:按 ID 获取对象
  • contains:检查某个 ID 是否存在
  • keys / values:列出当前已注册内容
  • clear:清空整个注册表

为什么这很重要

正因为 Monoceros 几乎所有模块都建立在注册表模型上,所以它才能稳定实现:

  • 热重载
  • 增量更新
  • 按 ID 精准启停
  • 配置和运行态分离

举个例子:

  • 你删掉一个调度 YAML 文件
  • 文件监听发现变更
  • 系统找到这个文件对应的定义 ID
  • 再通过注册表把它精确卸载

整个过程不需要全量重启。

对服主有什么实际价值

对服主来说,这意味着:

  • 资源文件可以按功能拆分
  • ID 可以稳定引用
  • 你能更放心地做局部热更新

所以在 Monoceros 里,一个好记、稳定、不冲突的 ID 命名方案非常重要