如何用 iii SDK 新建一个 worker 并连接引擎注册函数与触发器?

发布时间:2026/9/14 12:05:57
如何用 iii SDK 新建一个 worker 并连接引擎注册函数与触发器?
如何用 iii SDK 新建一个 worker 并连接引擎注册函数与触发器【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii你的任务是从零创建一个 iii worker用 iii SDK 写一个普通 TypeScript 项目让它通过 WebSocket 连接 iii 引擎注册一个可被系统调用的函数math::add并把该函数绑定到一个http触发器上最后用iii triggerCLI 和 HTTP 请求两条路径验证它真的工作。适用前提本地已安装 iii CLI、引擎正在运行且你能启动 Compose daemon用于引入提供http触发器类型的 http worker。文中主路径以 Node / TypeScript 为例源文档同时提供了 Python、Rust 的等价 API。准备条件安装 iii 并启动引擎按 Install 文档 的命令安装 iii 引擎并初始化项目安装脚本会从远程下载安装 iii CLI属于会修改本机的操作确认环境允许后再执行curl -fsSL https://install.iii.dev/iii/main/install.sh | sh iii project init iii-app cd iii-app在项目目录中启动引擎该终端保持不关闭iii --config config.yaml引擎启动后监听ws://localhost:49134。再开第二个终端在同一目录下创建 Compose 文件并启动 Compose daemonprintf containers: {}\n worker-compose.yaml iii compose --namespace dev --engine ws://127.0.0.1:49134Compose daemon 是必选步骤http这种触发器类型由独立的 http worker 发布而引入 registry 里的 worker如 http要通过 Compose 的compose::add完成。第三个终端用于执行后续所有命令且都在项目目录下。创建 worker 项目并声明 manifest按 Creating Workers / Workers 的说明worker 就是一个安装了 iii SDK、能连上引擎并注册函数或触发器的进程。用语言自带的包管理工具建一个正常的 TypeScript 项目安装 SDK 并提供src/index.ts之类的入口npm install iii-sdk为了让 Compose 能启动这个本地 worker在项目根目录放置iii.worker.yamlmanifest。manifest 描述的是“如何启动”worker示例值来自文档name: my-worker description: One-line summary of what this worker does. scripts: start: pnpm startscripts.start是 Compose 实际执行的启动命令把它指向你项目里运行src/index.ts的方式start脚本按你项目自身的构建/运行方案配置。worker 一旦跑起来iii 对 Compose 托管的进程和手动运行的 SDK 进程一视同仁。版本约束引擎和 SDK 包可以在同一 minor 线内使用不同的 patch 版本但要保持在同一 minor 版本文档举例0.11.x除非 release note 另有说明。连接引擎并注册函数与触发器入口代码src/index.ts如下各段均来自文档中的 Node / TypeScript 示例import { registerWorker } from iii-sdk; const url process.env.III_URL; if (!url) throw new Error(III_URL must be set); const worker registerWorker(url, { workerName: my-worker, workerDescription: One-line summary of what this worker does, }); worker.registerFunction(math::add, async (payload: { a: number; b: number }) { return { c: payload.a payload.b }; }); worker.registerTrigger({ type: http, function_id: math::add, config: { api_path: /math/add, http_method: POST }, });几点必须知道的语义连接方式worker 通过 WebSocket 连引擎约定是环境变量III_URL提供引擎地址也可以显式传给registerWorker。这条连接串是 worker 与 iii 实例之间唯一的耦合worker 进程可以部署在任何网络可达的位置。workerName缺省时显示名为hostname:pid。函数 idregisterFunction的 id 使用service::name形式触发器通过它引用你的函数。触发器绑定是乐观的即使此刻 http worker 还没连接registerTrigger也会被引擎存储等 http worker 加入后自动激活无需重新注册。绑定顺序不敏感。可选的请求/响应 schemaregisterFunction可以带request_format/response_formatJSON Schema。它们只作为契约文档展示在 console、iii trigger --help和 agent 可读的资料里目前不做运行时校验引擎不会因 payload 不匹配而拒绝。通过 Compose 启动 worker在第三个终端项目目录执行-n是--namespace的缩写指向正在运行的 Compose daemon 的命名空间iii trigger -n dev compose::add worker./workers/my-workerCompose daemon 终端会报告 worker 进入 ready文档示例输出耗时数值仅为示例→ my-worker starting ✓ my-worker ready (2.1s) up: 1 of 1 changed in 2.1sLinux/WSL2 上的已知问题Compose 托管的 worker 启动在 microVM 中需要读写/dev/kvm。如果 worker 启动失败并出现KVM not accessible说明当前用户不在kvm组按 Troubleshooting 的处理方式sudo usermod -aG kvm $USER该命令需要 sudo 权限修改的是系统用户组归属之后要重启会话让新组生效WSL2 下从 Windows 终端执行wsl --shutdown再重新打开发行版。验证函数注册与触发器绑定1. 直接调用函数。引擎按注册的函数路由调用不涉及触发器iii trigger math::add a2 b3文档示例输出为{ c: 5 }。如果刚添加完 worker 就调用看到message: Function math::add not found时等几秒再试——worker 在被添加后需要一点时间安装运行时依赖。2. 查看函数帮助。iii trigger与其他路径走完全相同的代码可以当作开发工具直接用iii trigger math::add --help函数如果附带了请求/响应 schema这里会显示参数结构。3. 引入 http worker 并验证触发器。先加入发布http触发器类型的 http workeriii trigger -n dev compose::add workerhttp之前注册的那个 http 触发器绑定会自动激活然后发请求http worker 的默认端口是 3111curl -X POST http://localhost:3111/math/add \ -H Content-Type: application/json \ -d {a: 2, b: 3}文档示例返回 200 OK请求通过已激活的触发器到达math::add响应体是 handler 的返回值本例即{ c: 5 }。同一个函数在 handler 不变的前提下同时响应 CLI 调用和 HTTP 请求。4. 查看引擎的注册表。引擎自身注册了一组 introspection 函数调用方式与普通函数相同iii trigger或 worker 代码里的worker.trigger完整清单见 Using iii / FunctionsFunction返回内容engine::workers::list所有已连接 worker 及指标传{ worker_id: uuid }查单个engine::functions::list所有已注册函数可用include_internal过滤engine::triggers::list所有已发布的触发器类型及其 config/call schemaengine::registered-triggers::list所有已注册的触发器实例绑定也可以在浏览器里用iii console打开交互式界面查看 workers、functions、triggers、日志和状态。失败现象与限制命名空间冲突worker 身份是(namespace, name)同一命名空间内名字独占重复的活 owner 会被拒绝错误码WORKER_NAMESPACE_CONFLICT。Node SDK 将其视为致命错误停止且不再重连。需要多租户/多项目共存时用registerWorker的namespace选项或III_NAMESPACE环境变量解析顺序options.namespace→III_NAMESPACE→ 引擎的default命名空间把不同部署放到不同命名空间。触发器注册被拒绝当活跃的 provider worker 拒绝你给的 config例如不合法的 trigger config引擎会向发起注册的 worker 回送带error内容的TriggerRegistrationResult并记录日志。worker 断开WebSocket 关闭时引擎自动把它的 Functions 和 Triggers 移出注册表进行中的调用被取消调用方会收到invocation_stopped错误需要捕获并按取消处理等 worker 重连后再重试。schema 不校验函数和触发器类型的请求/响应 schema 都是信息性的引擎不会拒绝不匹配的值这一点在写契约时要留意。优雅停机与下一步worker 退出时用 SDK 的shutdown干净关闭 WebSocket引擎会确定性地移除它的注册并触发engine::workers-available事件文档给出的 Node 示例process.on(SIGTERM, async () { await worker.shutdown(); process.exit(0); });不显式调用shutdown时进程异常退出最终会达到同样的清理结果只是时机取决于引擎何时注意到断开的 socket。完成本文后可以继续给同一函数绑定多个不同触发器如 http cron、用condition_function_id为触发器加条件门控见 Using iii / Triggers、编写自己的触发器类型供其他 worker 绑定见 Creating Workers / Triggers以及为 worker 添加状态state worker与更多语言的等价写法见 Workers 总览 与 Quickstart。【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考