跳到內容

健康探針

探針是在 apply 中透過 Plugin.probe 註冊的具名 Effect。註冊不會執行檢查。每次服務嘗試擁有自己的註冊及正在執行的檢查。

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。參閱執行轉換。