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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82768.shtml
英文地址,請注明出處:http://en.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無…