若你已读过《Agno 网关白名单与超时熔断》,可把其中「分层墙钟超时」映射到活动的 start_to_close_timeout;编排侧与成本阈值还可对照《LlamaIndex Workflows 远程成本矩阵》。可观测字段落盘习惯见《GenAI 可观测矩阵》,便于把 run_id 与网关请求对齐。
Worker 身份 · 重试策略 · 机密注入 · 网关回环与隧道 · 总结与购买
Worker 身份:可复现的第一步
- 在远程机创建专用 Unix 用户与工作目录,安装 Python 3.11+ 与
temporalio,与命名空间端点同一区域以降低 RTT。 - 构造
Worker时写入 identity 字符串,建议前缀含环境名、队列名短码与主机名,便于 Cloud UI 过滤。 - 为每次发布设置 build_id(镜像 digest 或
git rev-parse --short),与部署流水线一致,避免「幽灵 Worker」占队列。 - task_queue 与 Starter/Schedule 侧完全一致;多租户时用队列名隔离,勿在代码里硬编码他人队列。
完成后再装 Node 22 与 [email protected],执行 openclaw doctor,把网关基址、证书路径与代理变量修正到可通过健康探针。
重试策略:活动超时、心跳与失败形态
- 为调用 OpenClaw 工具链的活动设置 start_to_close_timeout,数值应大于「网关单次墙钟上限 + 一次重试裕量」,否则 Temporal 先杀活动而网关仍可能成功。
- 在长循环或等待外部回调处调用 activity.heartbeat,载荷只带进度计数或游标,避免大对象;heartbeat_timeout 取小于调度容忍、大于正常心跳间隔,防止网络抖动误判宕机。
- 工作流级重试保持保守;活动内对网关 401/Schema 拒绝抛不可重试
ApplicationError(non_retryable=True),对瞬时 429/连接复位使用默认指数退避。 - 验收:人为拔掉网关一秒,确认活动按预期重试;再制造 Schema 错误,确认不会无限重试刷爆配额。
机密注入:令牌不进仓库、不进默认历史字段
- 在 launchd plist 或进程管理器的
EnvironmentVariables中注入OPENCLAW_GATEWAY_TOKEN、Temporal 云命名空间证书路径等;CI 则用密钥管理器写到运行时环境,而非写入 workflow 输入默认值。 - 活动代码内用
os.environ读取;轮换令牌后滚动 Worker 进程使新进程继承新环境。 - 需要把工具调用关联到业务单号时,用 Activity 输入或 Search Attributes 承载业务 ID,勿把 Bearer 字符串写进 workflow 更新或可见日志。
网关 loopback 与隧道模式说明
本机回环(loopback):Worker 与 OpenClaw 网关进程同机时,活动 HTTP 客户端指向 127.0.0.1 或本机 Unix 套接字等价物,出站不经过公网,适合「远程 Mac 即信任边界」;防火墙策略最简单,只要本机端口不对外监听即可。
隧道模式:当编排机、Temporal Worker 与网关在拓扑上分离时,用 SSH 反向隧道、WireGuard 或服务网格 Sidecar,把「远端网关的 localhost」映射到 Worker 进程可解析的 DNS 名;此时仍应在 OpenClaw 侧做工具白名单与租户 scope,隧道只解决可达性,不替代鉴权。
- 在 Dashboard 为租户签发短效 Bearer,并在网关策略中显式放行活动将调用的工具名(其余默认拒绝)。
- 若经 HTTP tools/invoke,核对路径前缀与
doctor输出一致,避免 Worker 打到旧端口。
失败摘要回传:在活动 except 中组装 JSON,含 error_class、message、correlation_id、retryable;工作流侧以自定义 query 返回只读摘要、向父编排发 signal,或写入 Search Attributes/侧车键,使运维在 UI 只看到短摘要。整段模型原文应落对象存储或受控日志,而非默认 workflow history 大块文本。
总结与购买引导
先把 Worker 身份、队列与 build_id钉死,再对齐 心跳与超时和网关墙钟,最后用白名单 + 机密环境变量 + 隧道或回环收口出站。需要可签字、可通宵浸泡的远程苹果硅节点跑上述组合时,打开首页查看机型与区域,用套餐定价做机时预算,在购买页下单(均无需登录即可浏览),细则与工单入口见帮助中心。