# 《WaLiAPI - 本地 LLM API 网关》第3-2节:服务注册框架

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

大家好,我是技术UP主小傅哥。

上一节完成了多协议转换引擎。现在在 Proxy 层之上,我们需要一个服务注册框架——让 Knowledge(知识库)、MCP(模型上下文协议)等服务能独立注册路由、暴露状态,同时不干扰核心 API 网关路由。

# 一、本章诉求

  1. 理解为什么需要 Service trait——而不是把所有路由都堆在 router.rs
  2. 定义统一的 Service trait 接口
  3. 实现 ServiceRegistry 服务管理器
  4. 实现 merge_routes 路由合并机制
  5. 实现 get_service_statuses Tauri 命令
  6. 理解 services/mod.rs 的模块组织方式

# 二、为什么需要服务注册框架?

# 2.1 现状问题

当前 WaLiAPI 的所有 HTTP 路由都直接写在 router.rscreate_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

核心收益

  • 每个服务自包含:路由定义、状态检查、启用/禁用逻辑都在服务内部
  • 新增服务只需实现 Service trait + 注册到 ServiceRegistry
  • router.rs 只需一行 registry.merge_routes(state) 即可获得所有服务路由
  • Tauri 前端可通过 get_service_statuses 命令统一查看服务状态