Durable Functions各实例数据交换是否用Task Hub?及函数间传输方式咨询
Durable Functions 里 Client→Orchestration→Activity 这种链式调用的核心数据传输逻辑,完全依赖 Task Hub 持久化存储,而非直接的网络通信,具体各环节的流程如下:
Client 到 Orchestration
Client 发起 Orchestration 调用时,会把启动参数序列化后写入 Task Hub 的控制队列,同时在实例表中生成该 Orchestration 的元数据记录。Orchestration 运行时会持续监控控制队列,发现新任务后就拉取参数、启动对应的实例。Client 拿到的只是 Orchestration 的实例 ID,后续查询运行状态也是直接从 Task Hub 读取,不会和 Orchestration 实例做直接网络交互。Orchestration 到 Activity
Orchestration 调用 Activity 时,会将 Activity 的输入参数序列化后写入 Task Hub 的工作队列。Activity 运行时从工作队列中取出任务,反序列化参数执行逻辑,完成后把返回值序列化写回 Task Hub 的结果队列。Orchestration 运行时会轮询结果队列,拿到返回值后继续执行后续流程。返回值的存储与复用
不管是 Activity 还是 Orchestration 的返回值,都会被持久化到 Task Hub 的存储组件里(比如 Azure 表存储的实例表、历史表,或者你配置的 Cosmos DB)。后续如果有其他函数需要用到这些值,都是直接从 Task Hub 读取,不会去调用前一个函数的实例获取数据。
额外注意
- 默认用 JSON 序列化数据,所以传递的对象必须是可 JSON 序列化的;如果有复杂类型,需要自定义序列化逻辑。
- 这种基于 Task Hub 的传输机制,是 Durable Functions 实现可靠性(实例重启后能恢复状态)、可追溯性(全执行历史可查)的核心基础。
内容的提问来源于stack exchange,提问作者TY00

