健康探针
探针是在 apply 中通过 Plugin.probe
注册的具名 Effect。注册不会执行检查。每次服务尝试拥有自己的注册及正在运行的检查。
注册和请求探针
Section titled “注册和请求探针”import { Effect, Ref } from "effect"
import { Graft, Plugin } from "@graftland/graft"
const program = Effect.gen(function* () { const calls = yield* Ref.make(0) const plugin = Plugin.make({ name: "app/integration", apply: () => Plugin.probe( "upstream", Ref.update(calls, (n) => n + 1), ), }) const fork = yield* Graft.plugin(plugin) yield* fork.await yield* Ref.get(calls) // => 0 yield* fork.probes // => ["upstream"] yield* fork.probe("upstream") yield* Ref.get(calls) // => 1})await Effect.runPromise( program.pipe(Effect.scoped, Effect.provide(Graft.layer)),)| 规则 | 行为 |
|---|---|
| 归属 | 注册持续到注册时的 scope 关闭。重启会注册新的检查。 |
| 隔离 | 不同 fork 可以使用相同名称。同一次尝试中重复注册会失败。 |
| 上下文 | 检查使用注册时捕获的服务。每次请求都有自己的 scope。 |
| 失败 | Fork.ProbeError 保留检查的完整 cause。检查失败不会自动重启插件。 |
| 取消 | 关闭注册 scope 会中断正在运行的检查。中断请求会取消该次调用。 |
| 检查不存在 | 请求未注册的名称会得到 reason 为 Missing 的 ProbeError。 |
Remote 执行单元通过控制通道接受探针请求。描述实现不会运行 apply
或探针。开始服务会运行普通的
apply;就绪检查等待插件及其导出的服务就绪。探针成功、服务就绪和进程确认退出是不同的事实。
fork.probe 访问该 fork 自己的注册。宿主 Remote
fork 不会将此 API 转发给子进程。对于受管理的直接 Worker 和子进程部署,协调器会在切换前和恢复期间请求
policy.probes。候选探针失败会中止切换,并在结局中保留其 cause。参阅执行转换。