欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

也正巧前段時間 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 模式最核心的點是——服務(wù)端主動推送消息給客戶端,而不是等客戶端輪詢。

03

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

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

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

SSE 端點

我們使用 /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());
}

身份校驗和權(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。

驗證是否連接成功

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

點擊工具即可開始自然語言交互。

最后

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

相關(guān)文章

  • Java應(yīng)用服務(wù)器之tomcat部署的詳細(xì)教程

    Java應(yīng)用服務(wù)器之tomcat部署的詳細(xì)教程

    這篇文章主要介紹了Java應(yīng)用服務(wù)器之tomcat部署,本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 如何用Java實現(xiàn)啥夫曼編碼

    如何用Java實現(xiàn)啥夫曼編碼

    在開發(fā)手機(jī)程序時,總是希望壓縮網(wǎng)絡(luò)傳輸?shù)男畔ⅲ詼p少流量。本文僅以哈夫曼編碼為引導(dǎo),拋磚引玉,實現(xiàn)壓縮功能
    2013-08-08
  • 利用Springboot+Caffeine實現(xiàn)本地緩存實例代碼

    利用Springboot+Caffeine實現(xiàn)本地緩存實例代碼

    Caffeine是一個基于Java8開發(fā)的提供了近乎最佳命中率的高性能的緩存庫,下面這篇文章主要給大家介紹了關(guān)于利用Springboot+Caffeine實現(xiàn)本地緩存的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • SpringMVC中利用@InitBinder來對頁面數(shù)據(jù)進(jìn)行解析綁定的方法

    SpringMVC中利用@InitBinder來對頁面數(shù)據(jù)進(jìn)行解析綁定的方法

    本篇文章主要介紹了SpringMVC中利用@InitBinder來對頁面數(shù)據(jù)進(jìn)行解析綁定的方法,非常具有實用價值,需要的朋友可以參考下
    2018-03-03
  • java web項目里ehcache.xml介紹

    java web項目里ehcache.xml介紹

    java web項目里ehcache.xml介紹,需要的朋友可以參考一下
    2013-03-03
  • MyBatis高級映射及延遲加載的實現(xiàn)

    MyBatis高級映射及延遲加載的實現(xiàn)

    MyBatis在處理對象關(guān)系映射時,多對一關(guān)系是常見的場景,本文就來介紹了MyBatis高級映射及延遲加載的實現(xiàn),感興趣的可以了解一下
    2024-11-11
  • 深入了解Java核心類庫--泛型類

    深入了解Java核心類庫--泛型類

    這篇文章主要為大家詳細(xì)介紹了java泛型類定義與使用的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-07-07
  • Java如何獲取屬性的注釋信息詳解

    Java如何獲取屬性的注釋信息詳解

    Java注解是從Java5開始添加到Java的,這篇文章主要給大家介紹了關(guān)于Java如何獲取屬性的注釋信息的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • Spring?Boot?快速使用?HikariCP?連接池配置詳解

    Spring?Boot?快速使用?HikariCP?連接池配置詳解

    Spring Boot 2.x 將其作為默認(rèn)的連接池組件,項目中添加 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa 模塊后,HikariCP 依賴會被自動引入,這篇文章主要介紹了Spring?Boot使用HikariCP連接池配置詳解,需要的朋友可以參考下
    2023-06-06
  • Springboot常用注解及作用說明

    Springboot常用注解及作用說明

    這篇文章主要介紹了Springboot常用注解及作用說明,Springboot開發(fā)中注解是非常重要的不可或缺的,那么Springboot中有哪些常用的注解呢,今天我們就來看一下這些注解和其作用,需要的朋友可以參考下
    2023-08-08

最新評論