news 2026/9/16 0:39:56

SpringAI-mcp-sse方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringAI-mcp-sse方式

1.什么是SSE

Server-Sent Events 是基于 HTTP 协议的实时单向服务器推送技术,具有轻量级、⾃动重连和事 件分类型特点,适⽤于实时数据推送场景。允许服务器主动向客户端(如浏览器)推送实时数据。与 传统的轮询或⻓轮询不同, SSE 通过单⼀的持久连接实现数据的实时传输,客户端⽆需频繁发起请求。

2.SSE的特点

  • 单向通信
    • SSE 是单向的,服务器可以主动推送数据到客户端,但客户端⽆法直接通过 SSE 向服 务器发送数据。
  • 基于 HTTP 协议
    • SSE 使⽤标准的 HTTP 协议,⽆需额外的协议或端⼝配置,兼容性好,易于实现。
  • 轻量级
    • 相⽐ WebSocket , SSE 的实现更简单,代码量更少,适合简单的实时数据推送场景。
  • ⾃动重连
    • 如果连接断开,浏览器会⾃动尝试重新连接,开发者⽆需⼿动处理重连逻辑。
  • ⽀持事件类型
    • 服务器可以发送不同类型的事件,客户端可以根据事件类型执⾏不同的操作。
  • 支持消息 ID
    • 每条消息可以包含⼀个唯⼀的 ID ,⽤于断线重连后恢复消息流。

3.SSE工作原理

相⽐传统的请求-响应模式, SSE 提供了⼀种持久连接,允许服务器随时向客户端发送事件和 数据,实现了实时性的消息传递。 SSE 的⼯作原理⾮常简单直观。客户端通过与服务器建⽴⼀条持久化的 HTTP 连接,然后服 务器使⽤该连接将数据以事件流(event stream)的形式发送给客户端。这些事件流由多个 事件( event )组成,每个事件包含⼀个标识符、类型和数据字段。客户端通过监听事件流 来获取最新的数据,并在接收到事件后进⾏处理。

4.SSE应用场景

服务端想主动向客户端发送回音

5.搭建服务器

5.1导依赖

<dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId> </dependency> </dependencies>

5.2书写配置

server: port: 8011 spring: application: name: ai-mcp-sse-server ai: mcp: server: name: ai-mcp-sse-server sse-message-endpoint: /mcp/city

5.3开发工具

package com.jiazhong.mingxing.ai.siliconflow.glm.mcp.sse.server.service; import org.springframework.stereotype.Service; @Service public interface CityService { String city(); }
package com.jiazhong.mingxing.ai.siliconflow.glm.mcp.sse.server.service.impl; import com.jiazhong.mingxing.ai.siliconflow.glm.mcp.sse.server.service.CityService; import org.springframework.ai.tool.annotation.Tool; import org.springframework.stereotype.Service; @Service public class CityServiceImpl implements CityService { @Tool(description = "中国最宜居的城市",name = "cityService") public String city() { return "青岛:北方宜居标杆,中科院 2024 宜居榜首。属于温带海洋性气候,四季分明,湿度适中。海岸线长达 817 公里,绿化覆盖率达 41%,空气优良率常年超 92%。拥有 12 家三甲医院,以及青岛大学、中国海洋大学等高校,地铁运营里程超 400 公里。"; } }

5.4注册服务

package com.jiazhong.mingxing.ai.siliconflow.glm.mcp.sse.server.config; import com.jiazhong.mingxing.ai.siliconflow.glm.mcp.sse.server.service.CityService; import jakarta.annotation.Resource; import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.ai.tool.method.MethodToolCallbackProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ServiceConfig { @Resource private CityService cityService; @Bean("toolCallbackProvider") public ToolCallbackProvider toolCallbackProvider(){ return MethodToolCallbackProvider.builder().toolObjects(cityService).build(); } }

5.5启动项

package com.jiazhong.mingxing.ai.siliconflow.glm.mcp.sse.server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class AiSiliconflowGlmMcpSseServerApplication { public static void main(String[] args) { SpringApplication.run(AiSiliconflowGlmMcpSseServerApplication.class,args); } }

6.搭建客户端

6.1导依赖

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-openai</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-client</artifactId> </dependency> </dependencies>

6.2配置文件

server: port: 8012 spring: application: name: ai-siliconflow-glm-mcp-sse-client ai: openai: base-url: https://api.siliconflow.cn api-key: 你的轨迹流动的的key chat: options: model: "zai-org/GLM-4.6" temperature: 0.7 mcp: client: name: ai-siliconflow-glm-mcp-sse-client sse: connections: server1: url: http://localhost:8011 #要连接服务器的地址 (先启动服务区后启动客户端) toolcallback: enabled: true

6.3配置类

package com.jiazhong.mingxing.ai.siliconflow.glm.mcp.sse.client.config; import jakarta.annotation.Resource; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.openai.OpenAiChatModel; import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ChatClientConfig { @Resource private OpenAiChatModel openAiChatModel; @Resource private ToolCallbackProvider toolCallbackProvider; @Bean("openAiChatClient") public ChatClient openAiChatClient(){ return ChatClient.builder(openAiChatModel) .defaultToolCallbacks(toolCallbackProvider) .build(); } }

6.4controller类

package com.jiazhong.mingxing.ai.siliconflow.glm.mcp.sse.client.controller; import jakarta.annotation.Resource; import org.springframework.ai.chat.client.ChatClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; @RestController @RequestMapping("/city_client") public class CityClientController { @Resource private ChatClient openAiChatClient; @GetMapping(value = "/a",produces = "text/html;charset=utf-8") public Flux<String> a(@RequestParam("question") String question){ return openAiChatClient.prompt() .user(question) .stream().content(); } }

6.5启动类

package com.jiazhong.mingxing.ai.siliconflow.glm.mcp.sse.client; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class AiSiliconflowGlmMcpSseClientApplication { public static void main(String[] args) { SpringApplication.run(AiSiliconflowGlmMcpSseClientApplication.class,args); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 3:13:59

SpringAI-MySQLMcp服务

1.定义 MySQLMcp的server已被别人创建好&#xff0c;拉下来使用即可。 MySQL MCP &#xff08; Model Context Protocol for MySQL &#xff09; 是⼀个基于 MCP 协议的服务器组件&#xff0c;它像 ⼀座“桥梁”&#xff0c;连接⼤语⾔模型与 MySQL 数据库。通过它&#xff0…

作者头像 李华
网站建设 2026/9/14 6:48:07

FaceRecon-3D 创意玩法:将照片变成可编辑的 3D 素材

FaceRecon-3D 创意玩法&#xff1a;将照片变成可编辑的 3D 素材 想不想把手机里那张随手拍的自拍照&#xff0c;变成能任意旋转、缩放、换妆、加滤镜的立体人脸模型&#xff1f;不是渲染效果图&#xff0c;而是真正带几何结构、可导入Blender、Maya或Unity的3D资产——FaceRec…

作者头像 李华
网站建设 2026/9/12 1:26:25

YOLOv13官版镜像支持TensorRT,加速推理实测

YOLOv13官版镜像支持TensorRT&#xff0c;加速推理实测 1. 为什么这次实测值得你花5分钟看完 你有没有遇到过这样的情况&#xff1a;模型精度提上去了&#xff0c;但推理速度却卡在瓶颈&#xff1f;部署到边缘设备时&#xff0c;GPU显存爆了、延迟飙到200ms、客户盯着屏幕等结…

作者头像 李华
网站建设 2026/9/15 16:43:15

Hunyuan-MT-7B性能调优:批处理与并行推理提升吞吐量

Hunyuan-MT-7B性能调优&#xff1a;批处理与并行推理提升吞吐量 1. 为什么需要性能调优&#xff1a;从网页一键推理到高并发翻译服务 Hunyuan-MT-7B-WEBUI 这个名字听起来像一个简单的演示界面&#xff0c;但背后承载的是腾讯混元团队在机器翻译领域扎实的工程积累。当你点击…

作者头像 李华
网站建设 2026/9/3 2:55:41

旧电脑升级系统焕新指南:Windows设备重生计划

旧电脑升级系统焕新指南&#xff1a;Windows设备重生计划 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 旧电脑升级不再是难题&#xff01;本指南专为Windows笔记本和台式…

作者头像 李华
网站建设 2026/9/2 4:51:59

GLM-4.7-Flash精彩案例分享:高质量长文本续写与逻辑推理对比

GLM-4.7-Flash精彩案例分享&#xff1a;高质量长文本续写与逻辑推理对比 1. 为什么这个模型值得你花5分钟认真看完 你有没有遇到过这样的情况&#xff1a; 写技术文档写到一半卡壳&#xff0c;想让AI接着往下续&#xff0c;结果生成的内容要么跑题、要么逻辑断层、要么语言干…

作者头像 李华