当前位置: 首页 > news >正文

存量服务零改造接入 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 是一个协议翻译官 + 服务注册中心的组合体。

它做了两件事:

  1. 向上:接收 MCP 客户端的请求,暴露标准的 MCP 协议接口
  2. 向下:把 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 Key
  • method: 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.xNacos 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-api

6.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 GatewayHigress 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 调用。

它的架构设计有几个值得借鉴的思路:

  1. 零侵入:老系统不需要任何改造,降低接入门槛
  2. 动态感知:基于 Nacos 实现服务自动发现,运维友好
  3. 协议兼容:Request/Response Template 设计与 Higress 完全兼容,迁移成本低
  4. Java 闭环:让 Java 团队可以在自己熟悉的技术栈内完成 AI 能力建设

对于正在推进 AI 落地的企业来说,这或许是一条阻力最小的路径。


🎁 福利时间

如果你正在备战面试或者想要学习其他知识,给大家推荐一个宝藏知识库,作者整理了一些列 Java 程序员需要掌握的核心知识,有需要的自取不谢。

知识库地址:https://farerboy.com/


http://www.cnnetsun.cn/news/1760203.html

相关文章:

  • DataGrip高效技巧:SQL文件批量处理与数据库连接优化全攻略
  • C++的std--source_location在日志记录中自动获取源码位置
  • Windows平台CMake快速安装指南:从下载到验证
  • Singularity GPU支持深度指南:在容器中无缝使用CUDA和ROCm
  • 网络推广 seo 培训都学些什么_网络推广 seo 培训学习过程中常见的问题有哪些
  • 窗口置顶大师:让macOS用户每天节省1小时的效率工具
  • 罗技F710手柄D/X模式切换实战:如何用STM32解析USB-HID数据(附完整代码)
  • 紫光Pango开发环境避坑指南:从License申请到Synplify版本回退的完整踩坑记录
  • 手把手教你用串口烧录新唐MS51FB9AE芯片(附详细接线图+避坑指南)
  • 别再只改HXTAL_VALUE了!GD32串口乱码的完整时钟树调试指南(以GD32F407+8M晶振为例)
  • 避开Android Studio,用Qt for Android部署YOLOv11模型(附完整C++代码)
  • Keylogger安全防护终极指南:如何快速检测和防御键盘记录器攻击
  • 为什么你的Nuitka/Pyston/AOT-CPython在2026年突然崩溃?,深度解析C API冻结策略变更与GIL迁移断层
  • 5分钟掌握XUnity.AutoTranslator:Unity游戏实时翻译的终极解决方案
  • 保姆级教程:用Python实现一个简易编译器(从词法分析到语法树)
  • BeesAndroid实战教程:如何在Nexus 6设备上搭建Android 7.0开发环境
  • 如何构建高性能开源AI音频处理插件:OpenVINO-Plugins-AI-Audacity集成指南
  • 通勤路上也能高效复习:实测Gemini Guided Learning的互动卡片,比Anki还好用吗?
  • 深度学习是通用型人工智能的基础
  • CODESYS开发实战:指针与动态内存分配的高级应用
  • Qwerty Learner:将英语打字训练与单词记忆完美融合的开源学习工具
  • CVE-2024-24576 漏洞利用与测试工具集
  • 城通网盘加速:3种实用方案实现下载速率提升300%
  • 5个突破性功能:OpticsPy如何重塑Python光学计算生态
  • C++ Move 构造函数与性能优化技巧
  • SEO_新手必学的SEO优化入门教程与核心步骤
  • driftctl开发者指南:如何扩展新的云提供商支持
  • jCasbin最佳实践:7个技巧提升权限系统安全性与性能
  • 浏览器资源嗅探技术深度解析:猫抓插件的网络请求拦截与流媒体处理架构
  • ReactOS 技术揭秘:从零构建Windows兼容内核的挑战与突破