最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成MCP實(shí)現(xiàn)SSE實(shí)時通信功能

 更新時間:2025年05月13日 10:23:24   作者:架構(gòu)師沉默  
本文詳細(xì)介紹了如何在智能生產(chǎn)管理系統(tǒng)SPMS中集成MCP協(xié)議,并支持SSE模式,以實(shí)現(xiàn)系統(tǒng)與用戶的自然對話和智能響應(yīng),通過使用SpringBoot搭建SSE服務(wù)端,實(shí)現(xiàn)了服務(wù)端主動推送消息給客戶端的功能,需要的朋友可以參考下

上周五,運(yùn)營同事發(fā)來一句:“這個系統(tǒng)不能讓我直接說句話就創(chuàng)建采購單嗎?GPT 都能聊天了,你這么死板?”

好家伙,我一個智能生產(chǎn)管理系統(tǒng) SPMS(Smart Production Management System),確實(shí)就是少了點(diǎn)“嘴和耳朵”嘛。

也正巧前段時間 MCP(Model Context Protocol)在圈里火了起來。它主打的就是讓系統(tǒng)像 GPT 一樣和用戶自然對話,我們當(dāng)然不能落后。

于是,我擼起袖子,決定給 SPMS 搭個「MCP 協(xié)議」的接口,還要支持 SSE 模式 —— 讓系統(tǒng)開口說話、接住請求、智能響應(yīng)!

01

傳統(tǒng)系統(tǒng)沒“嘴” 和****“耳朵”********

傳統(tǒng)的后臺系統(tǒng),通常是 REST API + 前端頁面 + 手動操作:

  • 請求得寫死流程;

  • 交互不能說話;

  • 智能化完全靠拼接流程圖。

現(xiàn)在,AI 能力接進(jìn)系統(tǒng)就像長了嘴和耳朵。但是:

  • 怎么接住用戶的問題?

  • 怎么從系統(tǒng)里調(diào)用邏輯?

  • 怎么把結(jié)果發(fā)回去?

尤其是我們要用 SSE/HTTP 模式的 MCP,不是大家熟悉的 stdio 模式,就更得好好設(shè)計一套交互體系。

02

怎么理解 SSE 模式?

MCP 協(xié)議,全稱是 Model Context Protocol,簡單說,它定義了一個 AI 和系統(tǒng)交互的標(biāo)準(zhǔn)。

我們這次采用的是 MCP 的 SSE(Server-Sent Events)/HTTP 模式,它和我們熟悉的 REST API 很不一樣。

可以理解為:

類比功能解釋
耳朵HTTP 接收端口系統(tǒng)聽見了用戶的請求
嘴巴SSE 推送端口系統(tǒng)開口回答用戶
中樞大腦MCP 工具注冊與調(diào)用系統(tǒng)知道怎么做事
SSE 模式最核心的點(diǎn)是——服務(wù)端主動推送消息給客戶端,而不是等客戶端輪詢。

03

支持 SSE 的 SpringBoot 服務(wù)端架構(gòu)

我們用 SpringBoot 搭了一個完整的 SSE 服務(wù)端,結(jié)構(gòu)如下:

┌──────────────┐
│ MCP 客戶端   │
└────┬────┬────┘
     │    │
SSE連接 HTTP請求
     │    │
┌────▼────┴────┐
│ MCP 控制器   │ ← 攔截器做權(quán)限校驗(yàn)
├──────────────┤
│ /sse/stream   ← 建立 SSE 連接
│ /mcp/receive  ← 接收 POST 請求
└────┬─────────┘
     │
┌────▼──────┐
│ McpService │ ← 掃描方法 + 執(zhí)行 + 推送
└───────────┘

SSE 端點(diǎn)

我們使用 /sse/stream 建立連接:

@GetMapping("/sse/stream")
public SseEmitter connect(@RequestParam String token) {
    return sseManager.createEmitter(token);
}

HTTP 接收端

收到 MCP 客戶端請求,進(jìn)行工具調(diào)用:

@PostMapping("/mcp/receive")
public void handle(@RequestBody McpRequest req) {
    mcpService.invoke(req.getToken(), req.getMethod(), req.getParams());
}

身份校驗(yàn)和權(quán)限控制

我們設(shè)計了一個 AccessToken -> 用戶權(quán)限 的映射:

Map<String, Set<String>> tokenToTools = new ConcurrentHashMap<>();
tokenToTools.put("u123-token", Set.of("createOrder", "checkInventory"));

當(dāng)客戶端試圖調(diào)用一個未授權(quán)的方法時,返回:

Error: You are not allowed to use tool 'createPurchaseOrder'

每個 token 擁有哪些 MCP 工具,是在服務(wù)初始化時通過注解掃描注冊的。

04

掃描 MCP 工具 + 執(zhí)行調(diào)用 + SSE 推送

工具注冊

我們定義了一個 @McpMethod 注解:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface McpMethod {
    String name(); // 工具名
    String desc(); // 工具描述
}

掃描工具的方法:

@PostConstruct
public void scanMcpMethods() {
    // 反射掃描標(biāo)注了 @McpMethod 的方法并注冊
}

工具調(diào)用

根據(jù) methodName 找到對應(yīng)工具,再反射執(zhí)行:

public Object invoke(String token, String method, Map<String, Object> params) {
    if (!hasPermission(token, method)) {
        throw new UnauthorizedException();
    }
    Method tool = toolRegistry.get(method);
    Object result = tool.invoke(...);
    sseManager.pushToClient(token, result);
    return result;
}

SSE 推送消息

我們封裝了一個 SseManager 工具類,用來管理連接與推送:

public void pushToClient(String token, Object msg) {
    SseEmitter emitter = emitterMap.get(token);
    emitter.send(SseEmitter.event().data(msg));
}

客戶端接入(以 CherryStudio 為例)

配置 MCP 服務(wù)端地址與 AccessToken 即可:

進(jìn)入 CherryStudio 的 MCP 工具配置面板:

輸入服務(wù)端地址,格式如下:

http://your-server-host/mcp/sse/stream

注意 /sse/stream 是 MCP 的 Server-Sent Events 推流接口,必須開放訪問。

獲取 AccessToken

token 是系統(tǒng)中分配的 AccessToken。

驗(yàn)證是否連接成功

成功連接后,你將在 CherryStudio 的 MCP 工具欄中看到你定義的服務(wù)名稱。

點(diǎn)擊工具即可開始自然語言交互。

最后

到此這篇關(guān)于SpringBoot集成MCP實(shí)現(xiàn)SSE實(shí)時通信功能的文章就介紹到這了,更多相關(guān)SpringBoot MCP實(shí)現(xiàn)SSE通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?MyBatis之Mapper代理詳解

    Java?MyBatis之Mapper代理詳解

    這篇文章主要介紹了Java?web中MyBatis的mapper代理,文中有詳細(xì)的代碼示例,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2023-04-04
  • 解析mybatis-plus中的resultMap簡單使用

    解析mybatis-plus中的resultMap簡單使用

    mybatis-plus也只是聽過,可是終究沒有使用過。于是自己花幾天晚上的時間研究mybatis-plus的使用。這篇文章主要介紹了mybatis-plus的resultMap簡單使用,需要的朋友可以參考下
    2021-11-11
  • SpringBoot詳解如何進(jìn)行整合Druid數(shù)據(jù)源

    SpringBoot詳解如何進(jìn)行整合Druid數(shù)據(jù)源

    Druid是阿里開發(fā)的一款開源的數(shù)據(jù)源,被很多人認(rèn)為是Java語言中最好的數(shù)據(jù)庫連接池,本文主要介紹了SpringBoot整合Druid數(shù)據(jù)源的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java前后端的JSON傳輸方式(前后端JSON格式轉(zhuǎn)換)

    Java前后端的JSON傳輸方式(前后端JSON格式轉(zhuǎn)換)

    這篇文章主要介紹了Java前后端的JSON傳輸方式(前后端JSON格式轉(zhuǎn)換),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • macOS中搭建Java8開發(fā)環(huán)境(基于Intel?x86?64-bit)

    macOS中搭建Java8開發(fā)環(huán)境(基于Intel?x86?64-bit)

    這篇文章主要介紹了macOS中搭建Java8開發(fā)環(huán)境(基于Intel?x86?64-bit)?的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Spring Boot中使用Spring-data-jpa的配置方法詳解

    Spring Boot中使用Spring-data-jpa的配置方法詳解

    今天小編就為大家分享一篇關(guān)于Spring Boot中使用Spring-data-jpa的配置方法詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • SpringBoot利用EasyExcel實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)

    SpringBoot利用EasyExcel實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)

    EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具,它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能看,本文就將介紹如何利用EasyExcel實(shí)現(xiàn)導(dǎo)出數(shù)據(jù),需要的朋友可以參考下
    2023-07-07
  • Java如何提供給第三方使用接口方法詳解

    Java如何提供給第三方使用接口方法詳解

    最近在做一個項目,因一些機(jī)制問題,需要我用java代碼調(diào)用第三方接口,下面這篇文章主要給大家介紹了關(guān)于Java如何提供給第三方使用接口方法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • java實(shí)現(xiàn)SVG圖創(chuàng)建全過程

    java實(shí)現(xiàn)SVG圖創(chuàng)建全過程

    本文介紹了如何在Java中操作和生成SVG矢量圖,包括SVG的基本概念、圖形和面板類的設(shè)計、SVG DOM的創(chuàng)建與元素添加,以及如何將SVG保存為文件,最后指出實(shí)際應(yīng)用中還有更多復(fù)雜操作可實(shí)現(xiàn)
    2025-10-10
  • Java實(shí)現(xiàn)畫線、矩形、橢圓、字符串功能

    Java實(shí)現(xiàn)畫線、矩形、橢圓、字符串功能

    本篇文章主要介紹了Java實(shí)現(xiàn)畫線、矩形、橢圓、字符串功能的實(shí)例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05

最新評論

神农架林区| 澄江县| 新绛县| 营口市| 邵阳县| 吉林省| 桐庐县| 晋中市| 扎兰屯市| 镇康县| 绥江县| 龙泉市| 南城县| 仙桃市| 永吉县| 遂溪县| 镇原县| 会昌县| 读书| 彰武县| 石狮市| 恩平市| 满洲里市| 新巴尔虎右旗| 临朐县| 绍兴县| 金塔县| 潍坊市| 湘阴县| 五常市| 灵山县| 泰顺县| 尼木县| 苍溪县| 基隆市| 阿城市| 沙河市| 玉溪市| 广州市| 吴江市| 泸水县|