add: workers/ 进程插件目录 + demo 示例(external 模式经 Zenoh 注册路由)
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
"""
|
||||
Demo 进程插件 — 独立进程运行示例
|
||||
|
||||
与 inline 插件(src/plugins/)结构完全一致,区别仅在运行方式:
|
||||
- config/workers/demo/config.toml 声明 load_mode = "external"、module = "workers.demo"
|
||||
- 由 Docker/K8s 编排拉起独立进程: uv run worker_serve --type demo
|
||||
- 启动流程: 自读 TOML → 进程内契约校验 → create_workers →
|
||||
经 Zenoh 发布路由描述符(网关 RouteRegistry 动态挂载 HTTP 路由)→
|
||||
每 10s 周期重发布自愈 → SIGTERM 时摘除路由并 cleanup
|
||||
"""
|
||||
import logging
|
||||
|
||||
from chongming_worker.plugin import Plugin
|
||||
|
||||
from .router import * # noqa: F401,F403 触发 @rpc_method 注册
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DemoPlugin(Plugin):
|
||||
"""Demo 插件 — 无数据库的进程插件最小示例。"""
|
||||
|
||||
type = "demo"
|
||||
db_name = None # 无数据库
|
||||
auto_bind = True # 自动绑定 models/pydantic.py(支持 workers/ 路径)
|
||||
|
||||
async def on_init(self):
|
||||
"""首次 create_workers 时调用一次:读取插件私有配置。"""
|
||||
prefix = self.config.get("greeting_prefix", "Hello")
|
||||
self.set_var("greeting_prefix", prefix)
|
||||
logger.info("[demo] 初始化完成 (greeting_prefix=%s)", prefix)
|
||||
|
||||
async def on_cleanup(self):
|
||||
"""cleanup 时调用(无外部资源需要释放)。"""
|
||||
logger.info("[demo] 清理完成")
|
||||
|
||||
|
||||
# 暴露给 worker_serve 的模块级入口(签名与 inline 插件一致)
|
||||
plugin = DemoPlugin()
|
||||
create_workers = plugin.create_workers
|
||||
cleanup = plugin.cleanup
|
||||
Reference in New Issue
Block a user