Graft 把一个应用作为一棵插件树来运行。本页列出各个组成部分,每一行都链接到详细说明它的页面。
| 概念 |
含义 |
了解更多 |
| Plugin |
描述如何启动某项功能的值。 |
插件 |
| Fork |
插件的一个运行实例,拥有自己的配置和 Scope。 |
生命周期 |
| 服务 |
带有值的 Effect Context 键,在运行期间发布和撤回。 |
服务 |
| 事件 |
带类型的令牌。处理函数归注册它的插件所有。 |
事件 |
| 领域 |
划定 fork 可以看到哪些服务和事件的边界。 |
领域 |
| Intercept |
对某个 fork 及其下所有 fork 的 Context.Reference 的修改。 |
Intercept |
| 条目 |
graft.yml 的一行,加载一个插件。 |
配置文件 |
| 加载器 |
把条目列表变成 fork,并在条目被编辑时保持同步。 |
Loader API |
- 插件被加载为一个 fork。同一个插件加载两次,会得到两个相互独立的 fork。
- fork 可以发布服务,也可以注入其他 fork 发布的服务。
- fork 可以加载子插件。父级停止时,子级也会停止。
- 领域和 intercept 决定 fork 及其子级能看到什么。
- fork 的代码通常在应用进程里运行。借助
Remote,它也可以在子进程、worker 或另一台机器上运行,而它的服务仍然照常在应用中发布和注入。
| 保证 |
来源 |
| 依赖经过声明并受到检查 |
inject 由编译器检查。 |
| 消费者先于提供者停止 |
服务撤回流程。 |
| 资源总会被释放 |
每个 fork 拥有一个 Scope;任务归 FiberSet 所有。 |
失败保留完整的 Cause |
fork 状态、错误。 |
| 替换是原子的,新插件启动失败时回滚 |
替换插件。 |
Graft 不引入平行的概念体系,而是直接映射到 Effect:
| 在 Graft 中 |
在 Effect 中 |
| 插件 activation |
在 Scope 中运行的 Effect |
| 服务 |
Context 键 |
| 插件配置 |
Schema |
| 后台任务 |
由 FiberSet 持有的 Fiber |
| 重试 |
Schedule |
| 基于 Reference 的设置 |
Context.Reference |
Graft 只补充 Effect 所没有的部分:可在运行期间出现和消失的服务、插件树、事件、配置文件和热重载。让插件代码遵循这些对应关系的习惯,见插件中的 Effect。