跳转到内容

核心概念

Graft 把一个应用作为一棵插件树来运行。本页列出各个组成部分,每一行都链接到详细说明它的页面。

概念 含义 了解更多
Plugin 描述如何启动某项功能的值。 插件
Fork 插件的一个运行实例,拥有自己的配置和 Scope。 生命周期
服务 带有值的 Effect Context 键,在运行期间发布和撤回。 服务
事件 带类型的令牌。处理函数归注册它的插件所有。 事件
领域 划定 fork 可以看到哪些服务和事件的边界。 领域
Intercept 对某个 fork 及其下所有 fork 的 Context.Reference 的修改。 Intercept
条目 graft.yml 的一行,加载一个插件。 配置文件
加载器 把条目列表变成 fork,并在条目被编辑时保持同步。 Loader API
  1. 插件被加载为一个 fork。同一个插件加载两次,会得到两个相互独立的 fork。
  2. fork 可以发布服务,也可以注入其他 fork 发布的服务。
  3. fork 可以加载子插件。父级停止时,子级也会停止。
  4. 领域和 intercept 决定 fork 及其子级能看到什么。
  5. 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。

我想…… 阅读
马上运行点什么 快速开始
编写插件 插件
弄清插件为何没有运行 生命周期
不写代码配置应用 配置文件
理解某个错误名称 错误
让插件在另一个进程中运行 Remote
规划应用的各个部分 设计应用