《AI MCP Gateway 网关服务系统》第3-25节实战:LLM 对接测试 Streamable HTTP 接口,如何完成三件事的端到端验证
文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载导读本节是 AI MCP Gateway 网关服务系统对 Streamable HTTP 协议的收口验证章节。在前序章节已经完成 Streamable 协议基础能力开发的基础上本节通过三件事把能力跑起来验证GET / POST / DELETE三个 HTTP 入口是否可用、验证会话管理语义是否符合 Streamable 协议不再下发 SSE 的 endpoint 事件、验证 LLM 侧能否通过 Streamable HTTP 方式对接网关并完成工具调用。读完本节你将掌握一套可复用的 MCP 网关双协议SSE Streamable验证思路以及如何从协议语义层面区分两套传输机制。一、本章诉求Streamable 能力不是写出来而是真的能用起来前面章节中网关已经完成了 Streamable HTTP 协议的基础能力开发协议分析见 第2-5节streamable协议应用分析测试案例见 第3-22节streamable-http-api测试验证案例并通过 case 层与 domain 层的串联完成了协议编排见 第3-24节通过case和domain串联出Streamable协议。而本节要做的事情就是把这套能力真正验证起来主要完成三件事验证 Streamable HTTP 服务接口是否可用包括GET / POST / DELETE三个入口验证会话管理语义是否符合 Streamable 协议重点确认不会再像 SSE 一样发送 endpoint 事件验证 LLM 侧是否可以通过 Streamable HTTP 方式对接网关并完成工具调用。只要这三件事跑通就说明前面做的协议适配不是停留在代码层面而是真正可以在生产链路上被 LLM 使用。二、Streamable HTTP 与 SSE 是两套不同的协议语义不能直接混用本节验证工作的一个核心前提是Streamable HTTP 与 SSE 虽然都和 MCP 会话相关但它们是两套不同的协议语义。这一点在协议设计与验证时必须格外注意不能把 SSE 的处理逻辑直接套用到 Streamable 上。从 第2-4节streamable协议应用案例 的协议对比可以看到Streamable HTTP 的核心特征包括基于普通 HTTP 请求服务器可按需升级为 SSE 流式响应不强制长连接统一通过/message协议层通信支持 stateless无状态模式与现有基础设施兼容性好是对 HTTP SSE 的渐进式改进。而从 第3-24节 对两套协议差异的总结可以提炼出四个关键差异点这也是本节验证工作的观察重点差异维度SSE 协议Streamable HTTP 协议会话创建方式通过 GET 请求创建会话通过 POSTinitialize请求创建会话会话传递方式通过 SSE 事件流传递通过响应头Mcp-Session-Id返回会话 ID会话监听方式GET 请求即创建即监听GET 请求只负责监听已有会话不创建新会话端点事件会发送 endpoint 事件不发送 endpoint 事件避免破坏协议语义正因为存在这些差异网关在实现时把 sse、streamable 拆成了两套处理路径而不是在一套逻辑里堆if···else这一点在下一节展开。三、Streamable HTTP 的通信流程回顾同一个端点GET / POST 各司其职在进入验证细节之前先回顾 Streamable HTTP 的通信过程详见 第2-5节streamable协议应用分析。Streamable HTTP 采用单端点通信设计同一个接口方法如/mcp下通过 GET、POST 两种方法类型分别承担不同职责。步骤 1POST - 初始化通过 POST 请求传递 method 标识为initialize的初始化消息服务端创建sessionId并写入响应头Mcp-Session-Id。sessionId用于标记通信生命周期类似信贷审批、协议签约这类长流程业务中的会话标记。步骤 2GET - 建立监听拿到sessionId后以同一个接口的 GET 方式建立 SSE 连接用于数据传输。POST 是拿到批文GET 是建一条通信监听管道后续服务端需要主动推送的消息如通知、采样请求都通过这条 SSE 管道推送给客户端。步骤 3POST - 业务请求管道建立完毕后初始化完成确认、资源查询、工具列表查询tools/list、工具调用tools/call等操作都通过 POST 请求发送到服务端响应结果通过步骤 2 建立的 SSE 连接发送回客户端。因此本节验证GET / POST / DELETE三个入口本质上是验证这套单端点通信机制的完整闭环POST 负责创建会话与业务请求GET 负责监听已有会话DELETE 负责会话的结束与资源释放。四、功能设计把 Streamable 接入网关服务的验证链路本节的功能设计围绕Streamable HTTP 协议对接 LLM 服务的整体关系展开核心动作有三步把 Streamable HTTP 协议真正接入到网关服务验证链路中验证服务不再是只支持 SSE而是可以按协议方式选择走 Streamable调整会话管理逻辑让 Streamable HTTP 走它自己的协议语义——通过 POSTinitialize创建会话、通过响应头Mcp-Session-Id传递会话 ID、GET 只监听已有会话、不发送 endpoint 事件而不是继续沿用 SSE 的 endpoint 下发方式在 LLM 侧增加 Streamable 工具回调策略让模型也可以通过 Streamable 协议去加载 MCP 服务从而完成对网关能力的端到端验证。从 DDD 分层架构看这套设计延续了前序章节domain 核心领域不动case 层重新编排的思路。正如 第3-24节 所述对于一个新逻辑的引入不会废弃 domain 核心领域即积木而是在 case 层进行新的逻辑编排搭积木最后提供对应的接口服务。这样既保证了领域模型的稳定性也让新协议接入的成本可控。五、验证第二件事的关键会话管理语义与 case 层编排会话管理语义的验证是本节最容易出问题的地方因为它涉及两处代码层面的兼容设计详见 第3-24节 与 第3-23节调整case层结构设计处理不同方式的mcp实现1. case 层IMcpMessageService 泛型化与 InitializeNode 分支在 mcp 服务的 case 编排下原本有IMcpSessionService、IMcpMessageService两个接口类各自只有一套对应 sse 服务的实现。调整后做了两件事IMcpMessageService需要添加泛型因为 sse、streamable 返回的类型不一样泛型化之后才能在同一套接口框架下承载两种协议的差异化返回执行步骤与 sessionId 的使用位置不同sse、streamable 创建和使用 sessionId 的地方不一样。Streamable 的会话只是获取 sessionId消息处理中要单独拿出InitializeNode分支来完成会话的创建和初始化消息的处理——因为 Streamable 是通过 POSTinitialize创建会话的而不是像 SSE 那样在 GET 建立连接时创建。2. domain 层SessionManagementService 的类型区分领域层的会话管理服务SessionManagementService也需要做一小部分兼容动作。createSession方法在 sse 下会直接创建messageEndpoint调整后需要通过新增加的枚举SessionTransportTypeEnumVO来区分传输类型sse / streamable之后再按类型创建对应的会话结构。这样一来验证第二件事的通过标准就很明确调用 Streamable 入口时会话通过 POSTinitialize创建并以Mcp-Session-Id响应头返回GET 请求只负责监听已有会话整个交互过程中不会出现 SSE 那种 endpoint 事件下发会话创建逻辑正确走InitializeNode分支。六、验证第三件事的关键LLM 侧的 Streamable 工具回调策略第三件事的验证依赖 LLM 验证服务。网关在 domain 领域层实现了一个 LLM 服务能力详见 第3-20节验证服务LLM对接测试MCP接口其核心设计是动态构建含有 MCP 服务的对话模型MCP 的加载来自于接口层传入的gatewayId网关 ID按网关 ID 做动态加载而不是写死某个 MCP 服务支持是否重新加载因为网关配置是不断动态调整的所以流程上会有一个是否重新加载的操作重新加载的目的就是把 MCP 动态地刷新配置。在本节中LLM 侧在原有 SSE 回调的基础上增加了Streamable 工具回调策略让模型可以通过 Streamable HTTP 方式去加载 MCP 服务。验证时通过网关选择、认证key选择、是否重新加载等参数发起对话对应 第3-21节验证服务LLM对接测试MCP界面 的页面能力即可观察 LLM 是否走 Streamable 通道完成 tools/list 的工具发现和 tools/call 的工具调用。七、三件事的验证路径与通过标准把本章诉求的三个验证目标与验证动作对应起来可以整理成如下检查清单验证目标验证动作通过标准服务接口可用性分别调用 Streamable 入口的GET / POST / DELETE三个入口均返回预期响应无 4xx/5xx 错误会话管理语义观察会话创建与监听过程会话由 POSTinitialize创建通过Mcp-Session-Id响应头传递GET 仅监听已有会话全程不发送 endpoint 事件会话创建走InitializeNode分支、类型由SessionTransportTypeEnumVO区分LLM 工具调用通过 LLM 验证服务发起对话走 Streamable 回调策略LLM 成功加载 MCP 工具并完成 tools/list、tools/call 的完整调用闭环八、验证完成后的下一步衔接本节验证完成后Streamable HTTP 与 SSE 两套协议的开发和验证就全部完成了第3-26节分布式服务设计redis 对此有明确说明。接下来网关要解决的是单实例内存 Map 会话在分布式场景下的局限多实例部署下的会话数据共享、会话变更同步、服务重启恢复。这属于基础设施先行的后续演进与本节的协议验证解耦——先让协议能力真的能用起来再为它在分布式环境下的稳定性打地基。小结本节通过三件事完成了 Streamable HTTP 协议的端到端验证GET / POST / DELETE入口可用性、会话管理语义尤其是不再发送 endpoint 事件、以及 LLM 侧通过 Streamable 工具回调策略完成工具调用。验证过程中最需要把握的是 Streamable 与 SSE 的协议语义差异——它们都服务于 MCP 会话但会话创建、传递、监听方式完全不同不能混用。结合 case 层的IMcpMessageService泛型化、InitializeNode分支和 domain 层的SessionTransportTypeEnumVO类型区分网关在不废弃核心领域模型的前提下完成了双协议能力的编排与验证这也体现了 DDD 架构下领域积木复用、case 层灵活编排的设计价值。赞分享文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载相关推荐《AI MCP Gateway 网关服务系统》第3-14节实战解析 Swagger 标准 OpenAPI 协议把 HTTP 接口一键导入为 MCP 网关协议《AI MCP Gateway 网关服务系统》第3 14节实战解析 Swagger 标准 OpenAPI 协议把 HTTP 接口一键导入为 MCP 网关协议文档教程后端AI MCP Gateway 网关自测服务LLM 大模型对接 MCP 接口的动态加载设计与接口包装AI MCP Gateway 网关自测服务LLM 大模型对接 MCP 接口的动态加载设计与接口包装 本篇围绕 AI MCP Gateway 网关服务系统的验文档教程后端Zoom Phone Smart Embed CRM 集成实战基于 OAuth、Phone API 与 Webhook 构建 CRM 通信工作流Zoom Phone Smart Embed CRM 集成实战基于 OAuth、Phone API 与 Webhook 构建 CRM 通信工作流 导读 本文围文档教程后端上一篇IPED元数据伪造检测识别篡改文件的终极指南下一篇GyroFlow视频稳定工具从安装到专业使用的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从0到1看懂一个Blockly显示扩展:1602LCD扩展blocksdef.js与Python代码生成源码剖析

从0到1看懂一个Blockly显示扩展:1602LCD扩展blocksdef.js与Python代码生成源码剖析

从0到1看懂一个Blockly显示扩展:1602LCD扩展blocksdef.js与Python代码生成源码剖析 【免费下载链接】lcd-1602-display 源师兄扩展项目: 1602LCD | 由源师兄组织创建 项目地址: https://gitcode.com/yuanshixiong/lcd-1602-display lcd-1602-display 是源师兄…

2026/9/25 2:07:55 阅读更多 →
Delphi 13.1 + DevExpress VCL v25.2.3 真实交付避坑指南

Delphi 13.1 + DevExpress VCL v25.2.3 真实交付避坑指南

简介:本资源是面向Delphi中高级开发者的专业级UI增强套件,专为适配Delphi 10至13.1(Florence)版本设计,解决Windows桌面应用现代化界面开发效率低、控件功能单一、视觉表现力不足等核心痛点。包内含2000个文件&#xf…

2026/9/25 2:07:55 阅读更多 →
C#温室监控系统上位机开发:Modbus通信与源码实战

C#温室监控系统上位机开发:Modbus通信与源码实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 2:06:55 阅读更多 →

最新新闻

UEFI蓝屏排查实战:从引导诊断到启动盘制作全攻略

UEFI蓝屏排查实战:从引导诊断到启动盘制作全攻略

1. UEFI蓝屏问题的本质与诊断思路电脑蓝屏这件事,干了十几年运维和装机,我敢说UEFI环境下的蓝屏跟传统Legacy BIOS时代的蓝屏,排查逻辑完全是两码事。很多人一看到蓝屏就条件反射地重装系统,结果装完没两天又蓝了,问题…

2026/9/25 2:46:19 阅读更多 →
ADC采样的工程哲学:从量化误差到信号还原

ADC采样的工程哲学:从量化误差到信号还原

1. 先纠正一个广为流传的观点:量化误差不是“算错”,而是信息取舍做嵌入式这些年,我见过太多人一提到 ADC 就说“12 位精度比 10 位更准”。这话只对了一半,而且容易让人产生一个错误直觉——ADC 的分辨率越高,采出来的…

2026/9/25 2:46:19 阅读更多 →
灰色模型GM(1,1)电力负荷预测实战指南

灰色模型GM(1,1)电力负荷预测实战指南

简介:本资源是一份面向电力系统分析初学者与能源领域算法实践者的灰色模型(GM)负荷预测代码实现,聚焦小样本、非线性电力负荷序列的建模与预测问题。包内共8个文件,含4个MATLAB核心脚本(gmfun.m、ols_run.m…

2026/9/25 2:46:19 阅读更多 →
Linux+Samba 自建家庭云盘服务器实战指南

Linux+Samba 自建家庭云盘服务器实战指南

1. 整体构思与硬件选型说实在的,我一直觉得现在各家网盘虽然存取方便,但总有几道迈不过去的坎:容量稍微上去就要付费、上传下载速度被限死、文件放在别人服务器上总归不太安心。前段时间家里旧电脑退役,硬盘还好好的,我…

2026/9/25 2:46:19 阅读更多 →
麦克纳姆轮驱动原理与安装调试全指南:从受力分析到PID整定

麦克纳姆轮驱动原理与安装调试全指南:从受力分析到PID整定

1. 麦克纳姆轮到底解决了什么问题第一次见到麦克纳姆轮的人,大概率会盯着它看半天——轮子边缘斜着排了一圈小辊子,看起来像是哪个玩具厂随手拼出来的东西。但只要通电让它转起来,你就会发现这台小车能横着走、斜着走、原地打转,甚…

2026/9/25 2:46:19 阅读更多 →
RazerIOs离线安装全指南:Linux雷蛇外设开箱即用

RazerIOs离线安装全指南:Linux雷蛇外设开箱即用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 2:45:19 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →