Spring AI Alibaba 发布企业级 MCP 分布式部署方案

作者: 影子,刘宏宇,刘军

Spring AI 通过集成 MCP 官方的 java sdk,让 Spring Boot 开发者可以非常方便的开发自己的 MCP 服务,把自己企业内部的业务系统通过标准 MCP 形式发布为 AI Agent 能够接入的工具;另一方面,开发者也可以使用 Spring AI 开发自己的 AI Agent,去接入提供各种能力的 MCP 服务。

在企业级 AI Agent 的应用与落地场景,只是能发布或者调通 MCP 服务是远远不够的,其中一个非常重要的原因就是企业级的系统部署往往都是分布式的,不论是 Agent 还是 MCP Server,作为企业内部的一个个应用,它们都是要部署在多个机器上,要支持分布式的调用(这包括流量的负载均衡、节点变更动态感知等)。这么分析起来,Agent 与 MCP 需要的分布式能力与我们熟知微服务架构基本是一致的,Spring AI MCP 只是解决了 Agent 与 MCP 服务的编码与通信协议问题,我们还需要为 MCP 服务构建起一套地址自动发现、负载均衡调用的体系,这就是 Spring AI Alibaba MCP 整体方案解决的问题,接下来我们将在这篇文章中详细展开。

企业级 MCP 部署需要的分布式能力

市面上有很多公开可用的 MCP 服务,如生活类的高德地图、天气预报等 MCP 服务,这类服务的一个特点是他们都通过公开可访问的域名地址提供服务,因此对于消费端来说只需要配置访问地址即可使用。

区别于此类公共服务,Spring AI Alibaba MCP 解决的是企业内部 MCP 服务的部署与访问架构问题,接下来我们通过一个 Agent 的开发示例,一起来看一下 Spring AI Alibaba MCP 的整体架构。

在整个系统中,我们有一个使用 Spring AI Alibaba 开发的 MCP Server 应用,它为企业内提供机票预订的服务,该应用部署在多个实例,在实例启动过程中,Spring AI Alibaba 框架会将当前 IP 实例、工具列表等元数据注册到 Nacos,机票助手是一个基于 Spring AI Alibaba 开发的智能体应用,借助 Spring AI Alibaba 封装的分布式 MCP 能力,机票助手能够动态感知 MCP 订票系统的实例变化、工具变化,并基于内置的负载均衡策略对多个 MCP 实例节点发起调用。

  1. 企业内部订票服务是一个独立的 MCP Server 应用,使用 Spring AI Alibaba 框架开发,具备自动注册 MCP 实例与元数据到 Nacos 注册中心的能力,目前同时兼容 Nacos2 与 Nacos3。
  2. 机票助手 Agent 使用 Spring AI Alibaba 框架开发,作为 MCP Client 可以自动感知下游 MCP 服务实例的动态变化,动态感知 MCP 服务元数据的变化(如工具增加、参数更新、描述更新等),能够在保证负载均衡的情况下调用后端实例。

适用业务场景

对于任何需要在企业内部构建 MCP 业务系统的开发者,都可以使用 Spring AI Alibaba MCP。

接下来,我们从企业现实情况出发,分析在不同场景下,应该如何发布自己的 MCP 服务,并将 Agent 接入 MCP 服务:

  1. 企业内存在大量的已有微服务应用、HTTP 接口,需要将这些应用或接口发布为 MCP 服务。
  2. 无需考虑存量应用,直接开发全新的 MCP 服务。

通过 MCP 接入存量业务系统

对于存量应用或接口的接入,我们推荐使用增加代理应用的模式实现平滑接入,如下架构图所示,在存量应用和 Agent 之间部署一个新应用,这个应用主要有两个职责:

  1. 作为 server,该应用是一个标准的 MCP server,对外发布 Agent 可以使用的 MCP Tool。
  2. 作为 client,该应用负责转发 MCP 请求到后端应用,它使用 HttpClient 或 Dubbo 消费后端的存量应用。

以下是一个代码片段,展示如何在新开发的 MCP Server 应用中定义 MCP 服务并代理转发到后端微服务(rest 或 dubbo):

@Bean
@LoadBalanced
public RestTemplate restTemplate() {return new RestTemplate();
}// ......@Autowired
private RestTemplate restTemplate;@Tool(description = "获取指定订单号的订单详情")
public Order getAirQuality(@ToolParam(description = "订单号") String orderId) {return restTemplate.getForObject("http://order-service/order?id" + orderId, Order.class)
}

其中,restTemplate 基于 Spring Cloud Alibaba 的服务发现能力,可以动态发现后端 order-service 服务与实例地址。而 @Tool 和 @ToolParam 注解将发布为可被 Agent 使用的 MCP 工具。

开发全新 MCP

如果您不需要考虑存量的应用或服务,则整体会更简单,只需要使用 Spring AI Alibaba MCP 开发一个 MCP server,并将业务逻辑发布为 MCP tool 就可以了。

以下是使用 Spring AI Alibaba 开发的整体架构图:

完整开发指南

以下示例完整源码地址:

https://github.com/springaialibaba/spring-ai-alibaba-examples/tree/main/spring-ai-alibaba-mcp-example/starter-example

首先,您需要安装部署 Nacos,访问 Nacos Server 控制台,创建 MCP 服务专属的命名空间 nacos-default-mcp

注册 nacos-default-mcp 命名空间后,记住命名空间 ID:9ba5f1aa-b37d-493b-9057-72918a40ef35

开发 Spring AI Alibaba MCP Server

pom.xml 文件

添加如下 spring-ai-alibaba-starter-nacos-mcp-server 关键 starter 依赖到项目中:

<properties><spring-ai.version>1.0.0-M8</spring-ai.version><ai-alibaba.version>1.0.0-M8.1-SNAPSHOT</ai-alibaba.version>
</properties>
<dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-nacos-mcp-server</artifactId><version>${ai-alibaba.version}</version></dependency>
</dependencies>

修改 application.yml 文件

在 application.yml 文件中,增加 Nacos 地址配置,这样应用就可以连接到 Nacos Server 并实现 MCP 地址与元数据自动注册。

server:port: ${SERVER_PORT:19000}
spring:application:name: mcp-server-provider
---
spring:main:banner-mode: offai:mcp:server:name: mcp-server-providerversion: 1.0.1sse-message-endpoint: /mcp/messages_type: SYNCalibaba:mcp:nacos:enabled: trueserver-addr: 127.0.0.1:8848username: nacospassword: nacosregistry:service-namespace: 9ba5f1aa-b37d-493b-9057-72918a40ef35_# 调试日志_
logging:level:io:modelcontextprotocol:client: DEBUGspec: DEBUGserver: DEBUG

这里注意两个配置:

  1. MCP Server 的服务名称:mcp-server-provider2. MCP 的命名空间 ID:9ba5f1aa-b37d-493b-9057-72918a40ef35

效果演示

打开 Nacos 控制台,可以看到 MCP Server 自动注册服务与实例信息。

打开 Nacos 控制台,可以查看 MCP Server 自动注册上来的元数据信息。

开发 Spring AI Alibaba MCP Client

pom.xml 文件

<properties><spring-ai.version>1.0.0-M8</spring-ai.version><ai-alibaba.version>1.0.0-M8.1-SNAPSHOT</ai-alibaba.version>
</properties>
<dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-nacos-mcp-client</artifactId><version>${ai-alibaba.version}</version></dependency>
</dependencies>

这里需要在应用中新增引入 spring-ai-alibaba-starter-nacos-mcp-client 依赖。

application.yml 文件

在 application.yml 文件中,增加 Nacos 地址配置,这样应用就可以连接到 Nacos Server 并实现 MCP 地址与元数据自动发现。


server:port: 8080spring:application:name: mcp-client-webfluxai:openai:api-key: ${DASHSCOPE_API_KEY}base-url: https://dashscope.aliyuncs.com/compatible-modechat:options:model: qwen-maxalibaba:mcp:nacos:enabled: trueservice-namespace: 9ba5f1aa-b37d-493b-9057-72918a40ef35 # nacos的命名空间IDserver-addr: 127.0.0.1:8848username: nacospassword: nacosclient:sse:connections:server1: mcp-server-provider # 对应的MCP Server服务名mcp:client:enabled: truename: mcp-client-webfluxversion: 0.0.1initialized: truerequest-timeout: 600snacos-enabled: truetype: synctoolcallback:enabled: trueroot-change-notification: true# 调试日志
logging:level:io:modelcontextprotocol:client: DEBUGspec: DEBUG

请注意,我们需要在配置中指定要连接的 MCP 服务,这样 Client 将只订阅该服务相关地址与元数据的更新。

  client:sse:connections:server1: mcp-server-provider # 对应的MCP Server服务名

使用方式

MCP Client 注入

@Autowired
private List<LoadbalancedMcpSyncClient> mcpClients;  // For sync client// OR@Autowired
private List<LoadbalancedMcpAsyncClient> mcpClients;  // For async client

ToolCallbackProvider 注入

# sync类型,Bean名称为"loadbalancedSyncMcpToolCallbacks"
@Autowired
private LoadbalancedSyncMcpToolCallbackProvider toolCallbackProvider;
ToolCallback[] toolCallbacks = toolCallbackProvider.getToolCallbacks();// OR# Async类型,Bean名称为"loadbalancedMcpAsyncToolCallbacks"
@Autowired
private LoadbalancedAsyncMcpToolCallbackProvider toolCallbackProvider;
ToolCallback[] toolCallbacks = toolCallbackProvider.getToolCallbacks();

效果演示

MCP Client 注入

ToolCallbackProvider 注入

总结

Spring AI Alibaba MCP 联合 Nacos,解决了企业级 AI Agent 的应用与落地场景中 MCP 分布式部署与动态更新的关键问题,其中包括流量的负载均衡、节点变更动态感知等关键解决方案。

Nacos3 中的 MCP 核心能力还在持续演进中,接下来,Spring AI Alibaba 计划结合 Nacos3 mcp-registry 与 mcp-router 能力,构建更灵活强大的 Agent 开发体验。

  1. 查看完整示例源码:

https://github.com/springaialibaba/spring-ai-alibaba-examples/tree/main/spring-ai-alibaba-mcp-example/starter-example

  1. Spring AI Alibaba 官网:

https://java2ai.com

  1. Github 项目仓库:

https://github.com/alibaba/spring-ai-alibaba

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis实战-缓存篇(万字总结)

前言&#xff1a; 今天结合黑马点评这个项目&#xff0c;讲下有关Redis缓存的一些内容&#xff0c;例如缓存更新策略&#xff0c;缓存穿透&#xff0c;雪崩和击穿等。 今日所学&#xff1a; 什么是缓存缓存更新策略缓存穿透缓存雪崩缓存击穿缓存工具封存 目录 1.什么是缓存…

openFuyao开源发布,建设多样化算力集群开源软件生态

openFuyao 开源发布 随着 AI 技术的高速发展&#xff0c;算力需求呈爆发式增长&#xff0c;集群已成为主流生产方式。然而&#xff0c;当前集群软件生态发展滞后于硬件系统&#xff0c;面临多样化算力调度困难、超大规模集群软件支撑不足等挑战。这些问题的根源在于集群生产的…

深入理解 Redis 哨兵模式

Redis 哨兵模式深度解析&#xff1a;从原理到实践的全流程指南 在分布式系统架构中&#xff0c;Redis 作为高性能的内存数据库&#xff0c;其哨兵模式&#xff08;Sentinel&#xff09;是保障服务高可用性的核心方案。本文将从基础概念、运行机制出发&#xff0c;结合具体配置…

HackMyVM-Find

信息搜集 主机发现 ┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:39:60:4c, IPv4: 192.168.43.126 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.43.1 c6:45:66:05:91:88 …

2025年渗透测试面试题总结-匿名[校招]安全服务工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 匿名[校招]安全服务工程师 一面问题与完整回答 1. 学校、专业、成绩与排名 2. 学习安全时长 3. 当前学习…

TopCode之手撕快排

题目链接 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 使用数组分三块的思想 i用来遍历整个数组 left用来标记<key的边界 right用来标记>key的边界 然后i进行遍历,数组就分成了四块 [l,left]<key [left1,i-1]key [i,right-1]未…

bi软件是什么?bi软件是做什么用的?

目录 一、BI 软件是什么 1. 基本概念 2. 工作原理 二、BI 软件是做什么用的&#xff1f; 1. 精准洞察市场趋势 2. 优化企业战略规划 3. 辅助投资决策 三、如何选择合适的 BI 软件 1.功能匹配度 2.易用性和可扩展性 3.数据安全和稳定性 4.技术支持和服务 总结 生产…

11.14 LangGraph检查点系统实战:AI Agent会话恢复率提升287%的企业级方案

使用 LangGraph 构建生产级 AI Agent:LangGraph 持久化与记忆的"检查点系统的实现" 关键词:LangGraph 检查点系统,多回合记忆,状态持久化,会话恢复,AI Agent 容错机制 1. 检查点系统的核心价值 在复杂对话场景中,AI Agent 需要处理长达数十轮甚至数百轮的交…

鸿蒙完整项目-仿盒马App(一)首页静态页面

跟着鸿蒙小林博主&#xff0c;练习下项目~记录下首页的搭建,后续继续完善和整体项目完成会进行布局修改&#xff0c;先按照博主的跟做&#xff0c;后续在改 1.分为底部整体框架搭建 2.首页布局&#xff08;顶部搜索、新人专享、金刚区&#xff08;两个不同集合数据&#xff09…

LINUX安装运行jeelowcode后端项目(idea启动)

参考 LINUX安装运行jeelowcode后端项目&#xff08;命令行&#xff09;-CSDN博客 IntelliJ IDEA下载地址&#xff08;社区版、付费版&#xff09;-CSDN博客 软件已安装好&#xff0c;数据库也初始化完毕。 步骤1&#xff1a;打开项目目录步骤2&#xff1a;配置JDK步骤3&…

Web Vitals 核心指标快速掌握指南

Next.js 内置了对测量和报告性能指标的支持,我们可以通过 useReportWebVitals 钩子自行管理报告。它会在应用的前端代码开始之前运行,用于对应用进行全局分析、错误跟踪以及性能监控。 本篇内容主要详细介绍 6 个性能分析的指标,帮助我们更好的进行性能优化。 1. TTFB 定…

专业课复习笔记 10

感觉专业课就是考研的几个科目里面难度最高的科目&#xff0c;我要好好加油&#xff0c;争取拿下一百二十分。这个要是过不了线&#xff0c;考研基本废完了。我感觉专业课练习题没有说像是数学那么多练习题&#xff0c;反而是需要自己仔细去理解里面的知识&#xff0c;记住知识…

C语言 文件操作(2)

目录 1.文件的顺序读写 2.文件的随机读写 3.文件读取结束的判定 4.文件的缓冲区 1.文件的读取顺序 1.1 顺序读写函数介绍 上面说的适用于所有输入流一般指适用于标准输入流和其他输入流&#xff08;如文件输入流&#xff09;&#xff1b;所有输出流 一般指适用于标准输出…

QGIS新手教程2:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出)

QGIS新手教程&#xff1a;线图层与多边形图层基础操作指南&#xff08;点线互转、中心点提取与WKT导出&#xff09; 目录 QGIS新手教程&#xff1a;线图层与多边形图层基础操作指南&#xff08;点线互转、中心点提取与WKT导出&#xff09;&#x1f4cc; 引言第一部分&#xff1…

Netty 框架介绍

1. Netty 框架介绍 Netty 是一个基于 Java NIO&#xff08;Non-blocking I/O&#xff09;的异步事件驱动网络应用框架&#xff0c;旨在快速开发高性能、高可靠性的网络服务器和客户端。它简化了 TCP/UDP 等协议的编程&#xff0c;并提供了高度可定制的组件&#xff0c;适用于高…

Eclipse 插件开发 5.2 编辑器 获取当前编辑器

Eclipse 插件开发 5.2 编辑器 获取当前编辑器 1 获取活跃编辑器2 获取全部编辑器 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Click1 Bundle-SymbolicName: com.xu.click1;singleton:true Bundle-Version: 1.0.0 Bundle-Activator: com.xu.click1.Activato…

完成LRU页面调度算法的模拟

目录 1.上代码 2.实现思路 1.上代码 #include<iostream> using namespace std; //内存块类 class memory { public:void init();void alter(int a, int b);int check_full();int check_old();int check_exist(int a);void run();void refresh();friend int manage(me…

Three.js 直线拐角自动圆角化(圆弧转弯)

目录 前言 计算圆心坐标 计算两条直线的角平分线 计算dir1 dir2的夹角 计算圆心到直线交点的距离 计算圆心 计算从正X轴算起曲线开始、终止的角度 计算垂足与两直线交点距离 计算垂足 计算垂线 计算两垂线与x轴的夹角 ​编辑 计算圆弧是否按照顺时针方向来绘制 成功…

【MYSQL】mysql单表亿级数据查询优化处理

1、实践表明mysql单表数据超过一亿后&#xff0c;数据进行交并差效率会非常慢&#xff0c;所以这时候就要进行表的优化。 我这里主要是使用索引。 2、表字段精量精简 查索引&#xff0c;建索引&#xff0c;删索引语法 --查看索引 -- SHOW INDEX FROM 表名; -- 删除索引 --AL…

C++基础:模拟实现vector(有存在深层次的浅拷贝问题)

目录 引言 一、vector的基本框架 二、尾插push_back、reserve扩容、任意位置插入insert&#xff08;增&#xff09; 1.reserve扩容 2.push_back尾插 3.深层次的浅拷贝问题 4. 任意位置插入数据insert(会使迭代器失效) 三、构造、析构、拷贝构造函数 1.构造函数 1.1无…