# 《WaLiAPI - 本地 LLM API 网关》第3-2节:服务注册框架
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
大家好,我是技术UP主小傅哥。
上一节完成了多协议转换引擎。现在在 Proxy 层之上,我们需要一个服务注册框架——让 Knowledge(知识库)、MCP(模型上下文协议)等服务能独立注册路由、暴露状态,同时不干扰核心 API 网关路由。
# 一、本章诉求
- 理解为什么需要 Service trait——而不是把所有路由都堆在 router.rs
- 定义统一的 Service trait 接口
- 实现 ServiceRegistry 服务管理器
- 实现 merge_routes 路由合并机制
- 实现 get_service_statuses Tauri 命令
- 理解 services/mod.rs 的模块组织方式
# 二、为什么需要服务注册框架?
# 2.1 现状问题
当前 WaLiAPI 的所有 HTTP 路由都直接写在 router.rs 的 create_router 函数里。随着功能增多:
- 知识库有 15+ 个 CRUD + 搜索路由
- MCP Server 有 3 个 SSE/JSON-RPC 路由
- 未来可能还有更多服务(Webhook、OAuth 等)
如果继续堆在 router.rs,文件膨胀到难以维护,而且每个服务的路由、状态检查、生命周期管理都散落在各处。
# 2.2 Service trait 的设计思路
借鉴微服务架构中的 Service Registry 模式,但适配本地单进程场景:
┌─────────────────────────────────────────────────────┐
│ ServiceRegistry │
│ ┌───────────────┐ ┌───────────────┐ │
│ │ Knowledge │ │ MCP │ │
│ │ Service │ │ Service │ │
│ │ │ │ │ │
│ │ id: "knowledge"│ │ id: "mcp" │ │
│ │ routes() → 15 │ │ routes() → 3 │ │
│ │ status() → {} │ │ status() → {} │ │
│ └───────────────┘ └───────────────┘ │
│ │
│ merge_routes() → Router(18 routes) │
│ list_status() → [{knowledge: {...}, mcp: {...}}] │
└─────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
核心收益:
- 每个服务自包含:路由定义、状态检查、启用/禁用逻辑都在服务内部
- 新增服务只需实现 Service trait + 注册到 ServiceRegistry
- router.rs 只需一行
registry.merge_routes(state)即可获得所有服务路由 - Tauri 前端可通过
get_service_statuses命令统一查看服务状态

