add: 进程插件打包命令 build_plugin;RouteRegistry 常驻订阅与插件盘扫解耦(external 插件无需网关侧配置)
This commit is contained in:
@@ -208,7 +208,8 @@ uv run serve → FastAPI lifespan:
|
||||
4. setup_worker_manager() — WorkerManager + 定期 liveliness 刷新
|
||||
5. load_workers() — 按插件 [workers].load_mode 分派:
|
||||
inline → 进程内 import 插件 → 启动 Worker 协程
|
||||
external → 跳过(独立进程运行),启动 RouteRegistry 订阅 chongming/routes/**
|
||||
external → 跳过(独立进程运行,盘扫条目仅观测)
|
||||
5.1 setup_route_registry() — 常驻订阅 chongming/routes/**,external 插件路由动态挂载/摘除
|
||||
6. validate_contracts() — inline 插件三方契约校验,失败终止启动
|
||||
7. register_routes() — inline 插件盘扫生成 HTTP 路由
|
||||
8. setup_mqtt() — MQTT Bridge(inline 主题静态收集 + external 主题动态推送)
|
||||
@@ -282,7 +283,10 @@ load_mode = "external" # 独立进程运行,经 Zenoh 注册路由
|
||||
- 路由注册:worker 启动时 put 描述符到 `chongming/routes/<type>/...`,退出时 delete;每 10s 周期重发布自愈
|
||||
- 服务发现:liveliness `worker/<type>/<id>`(与 inline 副本同一机制,网关无需改动)
|
||||
- worker 进程自读 TOML 并在**自己进程内**做契约校验(`chongming_worker.contracts`);
|
||||
网关 RouteRegistry 订阅描述符后动态挂载/摘除 HTTP 路由(type 级 2s 防抖)
|
||||
网关 RouteRegistry **常驻订阅**描述符后动态挂载/摘除 HTTP 路由(type 级 2s 防抖)。
|
||||
路由注册与网关侧插件盘扫(`config/workers/*/config.toml`)解耦:**网关容器无需
|
||||
放置 external 插件的配置文件**,盘扫发现的 external 条目仅用于启动日志观测;
|
||||
inline 插件仍按盘扫在网关进程内加载,不受影响
|
||||
- 代码结构与 inline 插件完全一致(Plugin 基类 + router/ + models/),示例见本地 `workers/demo/`
|
||||
- 运行:
|
||||
|
||||
@@ -296,6 +300,31 @@ load_mode = "external" # 独立进程运行,经 Zenoh 注册路由
|
||||
- 进程插件容器:插件代码 + `chongming-worker` + 依赖
|
||||
- 隔离性由 `test_worker_isolation.py` 保证(阻断 chongming 导入 + AST 检查 import 语句)
|
||||
|
||||
### 进程插件打包
|
||||
|
||||
将 external 进程插件一键打包为可部署 zip(插件代码 + 配置 + 依赖清单 + 容器入口):
|
||||
|
||||
```bash
|
||||
uv run build_plugin demo # → dist/demo.zip
|
||||
uv run build_plugin demo --output /tmp/pkg
|
||||
```
|
||||
|
||||
产物布局(zip 根即容器工作目录):
|
||||
|
||||
```text
|
||||
workers/<name>/ 插件代码(模块 workers.<name>)
|
||||
config/workers/<name>/ 插件注册 + 端点配置
|
||||
config/zenoh_config.json5 Zenoh 会话配置
|
||||
config.toml 最小根配置(自动生成,仅 [zenoh] 节,不泄露网关配置)
|
||||
pyproject.toml uv 依赖清单(chongming-worker 内网 git 源)
|
||||
start.sh 容器入口:uv sync + worker_serve --type <name>
|
||||
```
|
||||
|
||||
- 插件扩展依赖(可选):在 `workers/<name>/requirements.txt` 中逐行声明,打包时自动合并进 `pyproject.toml` 的 dependencies
|
||||
- 容器内部署:`unzip <name>.zip -d /app && cd /app && ./start.sh`(镜像需预装 uv)
|
||||
- 打包前校验:`workers/<name>/` 与 `config/workers/<name>/config.toml` 必须存在,`load_mode` 非 `external` 时告警
|
||||
- `config/workers/<name>/` 仅部署在**插件容器**(worker 自读);网关侧无需放置(RouteRegistry 常驻订阅 Zenoh 路由描述符,与盘扫解耦)
|
||||
|
||||
---
|
||||
|
||||
## MQTT 协议
|
||||
@@ -434,7 +463,7 @@ uv pip install -e utils/<name> # 安装/更新工具包
|
||||
- `load_mode = "inline"`(默认):插件在网关进程内加载
|
||||
- `load_mode = "external"`:插件以独立进程运行(进程编排交给 Docker/K8s,
|
||||
进程入口 `uv run worker_serve --type <name>`),经 Zenoh 在 `chongming/routes/**`
|
||||
注册路由,网关动态挂载 HTTP 端点
|
||||
注册路由,网关动态挂载 HTTP 端点(RouteRegistry 常驻订阅,无需在网关侧保留插件配置)
|
||||
- 两种模式可同时存在(混合部署)
|
||||
- **进程插件与网关完全隔离**:进程插件只依赖 `chongming-worker` SDK + zenoh,
|
||||
与网关(`chongming` 包)零导入关系,仅通过 Zenoh(`chongming/routes/**` 注册路由、
|
||||
@@ -442,7 +471,8 @@ uv pip install -e utils/<name> # 安装/更新工具包
|
||||
**生产部署时进程插件与网关分别打包到不同容器**:
|
||||
- 网关容器:`chongming`(含 `src/chongming/`)+ 依赖
|
||||
- 进程插件容器:插件代码(`workers/<name>/`)+ `chongming-worker` + 依赖,
|
||||
入口 `chongming-worker --type <name>`(或 `uv run worker_serve --type <name>`)
|
||||
入口 `chongming-worker --type <name>`(或 `uv run worker_serve --type <name>`),
|
||||
打包: `uv run build_plugin <name>` → `dist/<name>.zip`(见「进程插件打包」)
|
||||
- **Zenoh 配置**:`config/zenoh_config.json5`
|
||||
- **插件注册**:`config/workers/<name>/config.toml` 的 `[workers]` 节,定义加载方式、副本数与运行时配置(旧全局 `config/workers/config.toml` 仅作兜底兼容)
|
||||
- **路由定义**:`config/workers/<name>/*.toml`,每个端点一个文件
|
||||
@@ -473,6 +503,7 @@ uv run gen_plugin <name> # 生成统一风格插件骨架
|
||||
uv run python -m chongming.scripts.gen_models # 生成 Pydantic 模型
|
||||
uv run build pyinstaller # PyInstaller 打包
|
||||
uv run build nuitka # Nuitka 打包
|
||||
uv run build_plugin <name> # 进程插件打包 → dist/<name>.zip
|
||||
chongming-worker --type <name> # 独立 Worker 进程(进程插件容器入口)
|
||||
uv pip install -e utils/<name> # 安装/更新工具包子包
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user