spring-ai之mcp整合sse
1. 什么是 SSE?
Server-Sent Events(SSE) 是一种基于 HTTP 的轻量级协议,允许服务器向客户端单向推送实时数据。与 WebSocket 不同,SSE 是单向通信(仅服务器→客户端),适用于股票行情、新闻推送、日志监控等场景。
SSE 核心特点:
✅ 简单易用:基于 HTTP,无需复杂协议
✅ 自动重连:浏览器内置断线重连机制
✅ 低延迟:比轮询(Polling)更高效
✅ 兼容性好:支持所有现代浏览器(IE 除外)
2. MCP 如何集成 SSE?
MCP 协议的核心设计,是围绕「一个长连接,两类接口」构建的高效通信模型。
1 个长连接:客户端通过 SSE 建立服务端到客户端的单向消息流;
2 个接口:
GET /sse
:用于建立长连接并接收服务端消息;POST /message
:客户端发送请求、响应或通知;
优势:连接稳定、延迟低、天然支持事件流,适用于 AI 工具类应用中持续会话与异步结果返回等场景。
3. spring-ai的集成使用?
调用端配置:
@Bean("syncMcpToolCallbackProvider")
public SyncMcpToolCallbackProvider syncMcpToolCallbackProvider(List<McpSyncClient> mcpClients) {///}
@Bean
public ChatClient chatClient(OpenAiChatModel openAiChatModel, @Qualifier("syncMcpToolCallbackProvider") ToolCallbackProvider syncMcpToolCallbackProvider, ChatMemory chatMemory) {}
{
"mcpServers": {
"xxx": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-jar",
"xxx.jar"
]
}
}
}
spring:
ai:
mcp:
client:
request-timeout: 360s
sse:
connections:
xxx:
url: http://127.0.0.1:8080
mcp端的配置:
spring:
ai:
mcp:
server:
name: ${spring.application.name}
version: 1.0.0
这样就可以自由拓展并注册tools ,当然,你也可以将tools注册到当前服务也是可以的,分开的拓展性更好