跳到主要内容

Client Basics

Client 调用来自 application,不来自 Step。下面的例子使用 order-123 这个 Flow ID

启动 Flow

StartFlow 创建 Flow execution,并在 Dex Server 接受请求后立即返回。它接收已注册的 Flow、业务 Flow ID、start Step input 和 StartFlowOptions

Flow ID 是 application 选择的身份。Dex Server 创建 Run ID。关于 timeout、request idempotency、ID reuse、retry、initial Attributes 和 config override,见 Flow options

run_id = await app_state.client.start_flow(
app_state.client_apis, "order-123", "first order", start_options()
)

例子: examples/python/dex_examples/primitives/client-apis/controller.py

停止 Flow

StopFlow 关闭一个 active Flow。默认是请求它 cooperative cancellation。你也可以立刻 terminate,或者带 reason 把它标记为 failed。

await client.stop_flow("order-123", StopFlowOptions(reason="customer cancelled"))

例子: examples/python/dex_examples/products/job-post/controller.py

调用 RPC

InvokeRPC 调用 active Flow 上已注册的 RPC handler,并返回结果。

result = await client.invoke_rpc(flow.trigger, "order-123", "approved")

例子: examples/python/dex_examples/primitives/rpc/controller.py

读写 Flow 状态

应用应通过 Flow RPC 读写 Attribute、AttributeMap、Channel 和 ChannelMap 状态。为每个 command 或 query 定义 typed RPC,只选择它需要的状态,再用 InvokeRPC 调用。这样 authorization、validation、lock、transaction 和状态变更都会留在 Flow 内。

Client 仍提供 WaitForAttributeMatch 作为阻塞式 observation API。当应用需要等待已知的 scalar Attribute 条件,而不是读取任意状态快照时,使用这个接口。