存量服务零改造接入 MCP?Spring AI Alibaba MCP Gateway 架构深度解析
当 AI 智能体浪潮席卷而来,企业面临的最大难题不是"如何开发新能力",而是"如何让跑了多年的老系统也能被 AI 调用"。
一、困局:AI 时代的老系统之痛
很多团队在推进 AI 落地时,都会遇到一个绕不开的坎:
公司里那些跑了三五年的核心业务系统——订单服务、用户中心、库存查询——对外暴露的都是标准的 HTTP 或 Dubbo 接口。这些系统稳定运行多年,代码结构复杂,牵一发而动全身。
现在业务方提了个需求:把这些服务能力开放给 AI Agent 调用。
摆在技术团队面前的有三条路:
| 方案 | 改造成本 | 风险 | 周期 |
|---|---|---|---|
| 老系统直接集成 MCP SDK | 高 | 极高,需重新测试发版 | 2-4 周 |
| 用 Higress 等网关做协议转换 | 中 | 中,需运维介入 | 1-2 周 |
| 独立代理层,零侵入老系统 | 低 | 低,独立部署 | 1-3 天 |
Spring AI Alibaba MCP Gateway 走的正是第三条路。
它的核心思路很清晰:用一个独立的 Java 代理应用挡在老系统和 AI 客户端之间,老系统什么都不用改,代理层负责把 MCP 协议翻译成老系统能听懂的 HTTP/Dubbo 调用。
二、MCP Gateway 到底是什么?
用一句话概括:
MCP Gateway 是一个协议翻译官 + 服务注册中心的组合体。
它做了两件事:
- 向上:接收 MCP 客户端的请求,暴露标准的 MCP 协议接口
- 向下:把 MCP 请求翻译成对后端 HTTP/Dubbo 服务的实际调用
而连接上下两层的桥梁,是Nacos 的 MCP Server Registry。
整个架构可以这样理解:
┌─────────────────────────────────────────────┐ │ MCP Client (AI Agent) │ │ Claude / Cursor / 自定义客户端 │ └──────────────────┬──────────────────────────┘ │ MCP 协议 ▼ ┌─────────────────────────────────────────────┐ │ Spring AI Alibaba MCP Gateway │ │ ┌───────────────────────────────────────┐ │ │ │ MCP Server (协议接收 & 解析) │ │ │ └───────────────────┬───────────────────┘ │ │ │ │ │ ┌───────────────────▼───────────────────┐ │ │ │ Protocol Translator (协议转换引擎) │ │ │ │ - 解析 request template │ │ │ │ - 组装 HTTP/Dubbo 调用 │ │ │ │ - 处理 response template │ │ │ └───────────────────┬───────────────────┘ │ │ │ │ │ ┌───────────────────▼───────────────────┐ │ │ │ Nacos Registry (服务发现 & 负载均衡) │ │ │ └───────────────────┬───────────────────┘ │ └──────────────────────┼──────────────────────┘ │ HTTP / Dubbo ▼ ┌─────────────────────────────────────────────┐ │ 存量业务系统(零改造) │ │ 订单服务 / 用户中心 / 库存查询 ... │ └─────────────────────────────────────────────┘最关键的一点:老系统完全不知道自己被 AI 调用了。它收到的就是一个普通的 HTTP 请求,和以前浏览器或 App 发来的没有任何区别。
三、为什么需要 Nacos 做中间层?
你可能会问:直接在 Gateway 里写死后端服务的地址不行吗?
当然可以,但那就失去了"动态"的意义。
引入 Nacos 作为 MCP Server 的注册中心,解决了三个实际问题:
3.1 服务动态上下线
老系统扩容、缩容、迁移,IP 地址变了怎么办?
有了 Nacos,Gateway 自动感知实例变化,不需要重启,不需要改配置。
3.2 负载均衡
同一个服务有多个实例,请求打到哪个?
Nacos 内置的负载均衡策略自动处理,不需要 Gateway 自己实现。
3.3 配置集中管理
MCP 工具的元信息(名称、描述、参数定义)存在哪里?
Nacos 3.0 提供了专门的 MCP Server 管理页面,可视化配置,一目了然。
四、核心机制:协议转换是怎么做到的?
这是整个 Gateway 最核心的部分。
4.1 请求模板(Request Template)
当你在 Nacos 中注册一个 MCP Tool 时,需要告诉 Gateway:收到这个工具的调用请求后,应该怎么去调后端服务。
这个"怎么调"的规则,就是通过 request template 来定义的:
{"requestTemplate":{"url":"/api/v3/weather/query?city={{ .args.city }}&key={{ .config.credentials.api_key.data }}","method":"GET","argsToUrlParam":true}}这段配置的含义:
{{ .args.city }}:从 MCP 调用参数中提取 city 字段,拼接到 URL 中{{ .config.credentials.api_key.data }}:从 Nacos 配置中读取 API Keymethod: GET:以 GET 方式发起请求
4.2 响应模板(Response Template)
后端服务返回的数据格式,和 MCP 客户端期望的格式往往不一致。
response template 负责做这个映射:
{"responseTemplate":{"body":"{\"temperature\": {{ .value.temperature }}, \"weather\": \"{{ .value.weather }}\"}"}}4.3 完整调用链路
一次完整的 MCP 调用,经过 Gateway 时经历了以下步骤:
1. MCP Client 发起 tools/call 请求 ↓ 2. Gateway 接收请求,解析出 tool name 和 arguments ↓ 3. 从 Nacos 查找该 tool 对应的 request template ↓ 4. 从 Nacos 获取后端服务的实例列表,通过负载均衡选出一个目标实例 ↓ 5. 将 template 中的变量替换为实际参数,组装成 HTTP 请求 ↓ 6. 发起 HTTP 调用,获取后端服务响应 ↓ 7. 根据 response template 转换响应格式 ↓ 8. 将转换后的结果返回给 MCP Client整个过程对老系统完全透明。
五、Nacos 2.x vs 3.x:版本差异说明
Spring AI Alibaba MCP Gateway 同时兼容 Nacos 2.x 和 3.x 两个版本,但获取 MCP 注册信息的方式有所不同:
| 能力 | Nacos 2.x | Nacos 3.x |
|---|---|---|
| MCP 注册信息获取 | 通过 ConfigService 读取配置 | 通过 MCP 专用 OpenAPI |
| 管理界面 | 无,需手动配置 | 提供可视化 MCP 管理页面 |
| 动态更新 | 支持 | 支持,体验更友好 |
建议:如果是新项目,优先使用 Nacos 3.x,管理界面能大幅降低配置出错率。
六、实战:从零搭建 MCP Gateway
6.1 引入依赖
在 Spring Boot 项目中添加以下依赖:
<dependencies><!-- Spring Web(Gateway 基础依赖) --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency><!-- Spring AI Alibaba MCP Gateway --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-mcp-gateway</artifactId><version>1.0.0.3-SNAPSHOT</version></dependency><!-- Nacos MCP Server Starter --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-alibaba-starter-nacos-mcp-server</artifactId><version>1.0.0.3-SNAPSHOT</version></dependency></dependencies>6.2 配置文件
在application.yml中配置 Nacos 连接信息:
spring:ai:alibaba:mcp:nacos:server-addr:127.0.0.1:8848namespace:publicusername:nacospassword:nacosgateway:# 指定需要代理的服务名称service-names:-order-service-user-service-weather-api6.3 启动服务
mvn spring-boot:run启动后,Gateway 会自动连接 Nacos,读取已注册的 MCP Server 配置,并对外暴露标准的 MCP 端点。
6.4 验证
使用 MCP Inspector 或任意 MCP Client 连接 Gateway 地址,即可看到已注册的 Tools 列表,并可以直接调用。
七、与 Higress 方案的对比
在 MCP 网关选型时,很多团队会纠结:用 Spring AI Alibaba MCP Gateway 还是 Higress?
| 维度 | Spring AI Alibaba MCP Gateway | Higress MCP Server 插件 |
|---|---|---|
| 技术栈 | Java,Spring 生态 | Go,云原生网关 |
| 部署方式 | 独立 Spring Boot 应用 | 网关插件,需部署 Higress |
| 协议模板 | 完全兼容 Higress 格式 | 原生支持 |
| 适用场景 | Java 技术栈团队,轻量级部署 | 已有 Higress 基础设施 |
| 运维成本 | 低,Java 开发者可独立维护 | 需要网关运维能力 |
两者不是替代关系,而是互补关系。如果你的团队已经是 Java 技术栈,且不想引入额外的网关组件,MCP Gateway 是更轻量的选择。
八、注意事项与最佳实践
8.1 当前限制
- Java 版本 SDK 暂不支持 Streamable HTTP 传输模式
- 协议转换目前仅支持 HTTP 和 Dubbo 两种后端协议
8.2 安全建议
- 敏感信息(如 API Key)应通过 Nacos 配置中心管理,不要硬编码在 template 中
- Gateway 对外暴露的 MCP 端点建议加上认证鉴权
8.3 性能优化
- 合理设置 Nacos 配置监听间隔,避免频繁拉取
- 对于高频调用的 Tool,可以考虑在 Gateway 层增加缓存
九、总结
Spring AI Alibaba MCP Gateway 解决了一个非常实际的问题:如何让跑了多年的老系统,在不改一行代码的前提下,也能被 AI Agent 调用。
它的架构设计有几个值得借鉴的思路:
- 零侵入:老系统不需要任何改造,降低接入门槛
- 动态感知:基于 Nacos 实现服务自动发现,运维友好
- 协议兼容:Request/Response Template 设计与 Higress 完全兼容,迁移成本低
- Java 闭环:让 Java 团队可以在自己熟悉的技术栈内完成 AI 能力建设
对于正在推进 AI 落地的企业来说,这或许是一条阻力最小的路径。
🎁 福利时间
如果你正在备战面试或者想要学习其他知识,给大家推荐一个宝藏知识库,作者整理了一些列 Java 程序员需要掌握的核心知识,有需要的自取不谢。
知识库地址:https://farerboy.com/
