modify: 进程插进目录结构更新

This commit is contained in:
2026-08-26 09:37:31 +08:00
parent 741d7cda09
commit 2270f2f6e8
4 changed files with 28 additions and 25 deletions
+11 -11
View File
@@ -18,7 +18,7 @@
进程插件的特点:
- **零导入关系**:只依赖 `chongming-worker` SDK + zenoh,禁止 import `chongming`(网关包)
- **独立生命周期**:由 Docker/K8s 编排拉起,进程入口 `worker_serve --type <name>`(或 `chongming-worker --type <name>`)
- **独立生命周期**:由 Docker/K8s 编排拉起,进程入口 `chongming-worker --type <name>`(SDK console script)
- **动态路由**:启动时把路由描述符发布到 Zenoh `chongming/routes/<type>/...`,网关 RouteRegistry 常驻订阅后动态挂载 HTTP 端点;退出时摘除
- **独立打包**:`uv run build_plugin <name>` 一键打包为可部署 zip,与网关分别部署到不同容器
- **代码结构一致**:与 inline 插件完全相同(Plugin 基类 + router/ + models/)
@@ -44,7 +44,7 @@ graph TB
end
subgraph PW[进程插件容器 workers/demo]
WS[worker_serve 进程]
WS[chongming-worker 进程]
WS -->|① put 路由描述符<br/>chongming/routes/demo/**| REG
WS -->|② liveliness 注册<br/>worker/demo/<id>| WM
end
@@ -57,7 +57,7 @@ graph TB
### 2.2 Worker 进程启动流程(`chongming_worker.process.worker_serve`)
```text
worker_serve --type demo
chongming-worker --type demo
1. 读全局 config.toml(仅 [zenoh] 节)→ 打开 Zenoh 会话
2. 自读 config/workers/demo/config.toml 的 [workers] 节(load_plugin_config 展平)
3. import 插件模块(plugins.<name> / workers.<name>)→ 触发 @rpc_method 注册
@@ -111,7 +111,7 @@ workers/<name>/ # 项目根 = zip 根 = 容器工作目录
│ └── <操作名>.toml # 每个端点一个定义文件
├── config.toml # 最小根配置(仅 [zenoh] 节,worker 启动必需)
├── pyproject.toml # uv 依赖清单(chongming-worker + 扩展依赖)
└── start.sh # 容器入口(uv sync + uv run worker_serve --type <name>)
└── start.sh # 容器入口(uv sync + uv run chongming-worker --type <name>)
```
> 参考示例:`workers/demo/`(完整项目,含 5 个端点,配合 `test_worker_isolation.py` /
@@ -162,7 +162,7 @@ cleanup = _plugin.cleanup
```
> 注意:`module` 注册为 `workers.<name>` 时,`sys.path` 需包含项目根目录——
> `worker_serve` 已自动处理(console script 启动时会显式把 CWD 加入 `sys.path`),
> `chongming-worker` 已自动处理(console script 启动时会显式把 CWD 加入 `sys.path`),
> 只需在项目根 `workers/<name>/` 下运行。
### 第 2 步:插件注册配置
@@ -267,11 +267,11 @@ __all__ = ["hello"]
```bash
cd workers/demo
uv sync # 首次:安装依赖(项目独立 venv,与容器一致)
uv run worker_serve --type demo # 本地调试
uv run worker_serve --type demo --count 1 # 覆盖副本数
uv run chongming-worker --type demo # 本地调试
uv run chongming-worker --type demo --count 1 # 覆盖副本数
./start.sh # 与容器一致的启动方式
# 开发期复用仓库 venv(已装好 SDK)时,用 --project 指向仓库根:
uv run --project .. worker_serve --type demo
uv run --project .. chongming-worker --type demo
```
启动后预期日志:
@@ -313,7 +313,7 @@ config/workers/<name>/ 插件注册 + 端点配置
config/zenoh_config.json5 Zenoh 会话配置
config.toml 最小根配置(仅 [zenoh] 节,worker 启动必需)
pyproject.toml uv 依赖清单(chongming-worker 内网 git 源 + orjson + 扩展依赖)
start.sh 容器入口:uv sync --no-dev + uv run worker_serve --type <name>
start.sh 容器入口:uv sync --no-dev + uv run chongming-worker --type <name>
```
打包前校验(任一不满足即失败退出):
@@ -467,7 +467,7 @@ Worker 进程启动时自读 TOML 并**在自己进程内**做三方一致性校
| `TypeError: rpc_method() got an unexpected keyword argument 'stream'` | venv 里是旧版 chongming-worker(git 源拉取),本地未 push 的框架改动不生效;联调时 `uv pip install -e utils/worker` |
| 路由没出现 | worker 是否就绪(日志「路由发布完成」);网关 RouteRegistry 是否订阅(启动流程 5.1);每 10s 自愈重发布,稍等或重启 worker |
| 路由一直 404 | worker 是否已退出(优雅退出会摘除路由);进程被 SIGKILL 时描述符残留,重启 worker 后重发布自愈覆盖 |
| 找不到插件配置 | `worker_serve` 须在**插件项目根** `workers/<name>/` 下运行(读 `config/workers/<name>/config.toml`,`--config` 可指定全局配置路径) |
| 找不到插件配置 | `chongming-worker` 须在**插件项目根** `workers/<name>/` 下运行(读 `config/workers/<name>/config.toml`,`--config` 可指定全局配置路径) |
| storage.* 端点报「storage 未配置」 | 插件 config.toml 未配置 `[workers.config.storage]`(或 `enabled = false` / 连接失败降级)。补齐配置后重启 worker;启动日志可见「对象存储已就绪」或「storage 连接失败」告警 |
| 容器内 import `workers.demo` 失败 | 确认在容器工作目录(zip 根)启动,`start.sh` 内含 `cd "$(dirname "$0")"`,worker_serve 会把 CWD 加入 sys.path |
@@ -478,7 +478,7 @@ Worker 进程启动时自读 TOML 并**在自己进程内**做三方一致性校
```bash
uv run gen_plugin <name> --process # 生成进程插件项目骨架
cd workers/<name> # 以下均在插件项目根下执行
uv run worker_serve --type <name> # 本地调试独立 Worker 进程
uv run chongming-worker --type <name> # 本地调试独立 Worker 进程(项目根下)
./start.sh # 与容器一致的启动方式(uv sync + 启动)
cd .. && uv run build_plugin <name> # 进程插件打包 → dist/<name>.zip
uv run gen_models workers/<name>/config/workers/<name> workers/<name>/workers/<name> # 生成模型