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

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

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

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

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

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

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

01

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

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

  • 請(qǐng)求得寫(xiě)死流程;

  • 交互不能說(shuō)話;

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

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

  • 怎么接住用戶(hù)的問(wèn)題?

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

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

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

02

怎么理解 SSE 模式?

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

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

可以理解為:

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

03

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

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

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

SSE 端點(diǎn)

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

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

HTTP 接收端

收到 MCP 客戶(hù)端請(qǐng)求,進(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)限控制

我們?cè)O(shè)計(jì)了一個(gè) AccessToken -> 用戶(hù)權(quán)限 的映射:

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

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

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

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

04

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

工具注冊(cè)

我們定義了一個(gè) @McpMethod 注解:

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

掃描工具的方法:

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

工具調(diào)用

根據(jù) methodName 找到對(duì)應(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 推送消息

我們封裝了一個(gè) SseManager 工具類(lèi),用來(lái)管理連接與推送:

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

客戶(hù)端接入(以 CherryStudio 為例)

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

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

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

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

注意 /sse/stream 是 MCP 的 Server-Sent Events 推流接口,必須開(kāi)放訪問(wèn)。

獲取 AccessToken

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

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

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

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

最后

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    java web項(xiàng)目里ehcache.xml介紹

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

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

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

    深入了解Java核心類(lèi)庫(kù)--泛型類(lèi)

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

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

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

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

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

    Springboot常用注解及作用說(shuō)明

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

最新評(píng)論