搭建基于 Solon AI 的 Streamable MCP 服务并部署至阿里云百炼
搭建基于 Solon AI 的 Streamable MCP 服务并部署至阿里云百炼背景与目标在 AI 应用开发中MCPModel Context Protocol成为连接 LLM 与外部工具的标准协议。本文通过实际代码演示从零搭建一个支持流式响应的 MCP 服务Streamable MCP并部署到阿里云百炼平台实现生产级可用。我们将使用Solon AI框架轻量级 Java 微服务框架构建服务端通过 SSEServer-Sent Events实现流式输出最终将服务容器化并部署至阿里云百炼。## 环境准备- JDK 17± Solon 2.8推荐最新版- Maven 3.6± Docker用于容器化部署- 阿里云百炼账号开通模型服务## 第一步创建 Solon AI MCP 项目使用 Maven 脚手架创建项目核心依赖如下xmldependencies !-- Solon AI 核心 -- dependency groupIdorg.noear/groupId artifactIdsolon-ai/artifactId version2.8.1/version /dependency !-- MCP 协议支持 -- dependency groupIdorg.noear/groupId artifactIdsolon-ai-mcp/artifactId version2.8.1/version /dependency !-- 流式响应支持 -- dependency groupIdorg.noear/groupId artifactIdsolon-ai-stream/artifactId version2.8.1/version /dependency/dependencies## 第二步实现 Streamable MCP 服务我们构建一个天气查询工具支持流式返回结果逐步输出城市、温度、湿度信息。java// 1. 定义工具接口 - WeatherTool.javaimport org.noear.solon.ai.tool.ToolProvider;import org.noear.solon.ai.tool.annotation.Tool;import org.noear.solon.ai.tool.annotation.ToolParam;import org.noear.solon.ai.stream.StreamEmitter;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 天气查询工具 - 支持流式输出 */ToolProviderpublic class WeatherTool { private static final Logger log LoggerFactory.getLogger(WeatherTool.class); /** * 查询指定城市的天气信息流式输出 * param city 城市名称如北京 * param emitter 流式发射器用于逐步返回数据 */ Tool(name get_weather_stream, description 获取指定城市的天气信息支持流式返回) public void getWeather( ToolParam(description 城市名称如北京) String city, StreamEmitter emitter) { log.info(开始查询城市天气: {}, city); // 模拟逐步获取数据的过程 try { // 步骤1返回城市信息 emitter.emit({\type\:\city\,\data\:\ city \}\n); Thread.sleep(500); // 模拟网络延迟 // 步骤2返回温度 double temp 25.0 Math.random() * 10; emitter.emit({\type\:\temperature\,\data\:\ String.format(%.1f, temp) °C\}\n); Thread.sleep(500); // 步骤3返回湿度 int humidity 40 (int)(Math.random() * 40); emitter.emit({\type\:\humidity\,\data\:\ humidity %\}\n); Thread.sleep(300); // 步骤4返回风速 double windSpeed 3.0 Math.random() * 5; emitter.emit({\type\:\wind_speed\,\data\:\ String.format(%.1f, windSpeed) m/s\}\n); // 完成流式输出 emitter.complete(); log.info(天气查询完成: {}, city); } catch (InterruptedException e) { Thread.currentThread().interrupt(); emitter.error(new RuntimeException(查询中断)); } }}## 第三步配置并启动 MCP 服务创建主启动类集成 MCP 协议端点并注册自定义工具。java// 2. 主启动类 - MCPApplication.javaimport org.noear.solon.Solon;import org.noear.solon.ai.mcp.McpServer;import org.noear.solon.ai.mcp.server.McpServerConfig;import org.noear.solon.ai.mcp.server.transport.SseMcpTransport;import org.noear.solon.ai.stream.StreamEmitter;/** * Streamable MCP 服务启动器 * 暴露 /mcp/sse 端点用于流式通信 */public class MCPApplication { public static void main(String[] args) { Solon.start(MCPApplication.class, args, app - { // 注册自定义工具 app.context().beanMake(WeatherTool.class); // 配置 MCP 服务器SSE 传输模式 McpServerConfig config new McpServerConfig(); config.setName(WeatherMCP); config.setVersion(1.0.0); config.setTransport(new SseMcpTransport(/mcp/sse)); // 启动 MCP 服务 McpServer server new McpServer(config); server.start(); // 在控制台打印服务地址 System.out.println( Streamable MCP 服务已启动 ); System.out.println(SSE 端点: http://localhost:8080/mcp/sse); System.out.println(健康检查: http://localhost:8080/health); }); } /** * 健康检查端点可选 */ Mapping(/health) public String health() { return {\status\:\UP\,\service\:\WeatherMCP\}; }}## 第四步配置阿里云百炼部署创建 Dockerfile 用于容器化部署并配置阿里云百炼的 MCP 集成。dockerfile# Dockerfile - 用于阿里云百炼部署FROM openjdk:17-jdk-slimWORKDIR /app# 复制构建产物COPY target/mcp-weather-service-1.0.0.jar app.jar# 暴露 MCP 端口EXPOSE 8080# 启动命令启用流式输出ENTRYPOINT [java, -jar, app.jar, --server.port8080]在阿里云百炼平台创建 MCP 服务时需配置如下连接信息json{ mcp_servers: { weather_service: { url: https://your-deployed-domain/mcp/sse, type: sse, capabilities: { streaming: true } } }}## 第五步部署至阿里云百炼1. 构建 Docker 镜像并推送至阿里云容器镜像服务bash# 构建镜像docker build -t registry.cn-hangzhou.aliyuncs.com/your-namespace/mcp-weather:1.0.0 .# 推送镜像docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/mcp-weather:1.0.02. 在阿里云百炼控制台 - 创建「模型服务」→「MCP 服务」 - 选择容器部署配置镜像地址 - 设置环境变量MCP_TRANSPORTsse- 配置健康检查路径/health3. 绑定自定义域名开启 HTTPS百炼要求强制 HTTPS。## 测试流式 MCP 服务使用 curl 模拟 MCP 客户端请求通过 SSE 端点bash# 模拟 MCP 客户端发送工具调用请求curl -X POST https://your-domain/mcp/sse \ -H Content-Type: application/json \ -H Accept: text/event-stream \ -d { jsonrpc: 2.0, id: 1, method: tools/call, params: { name: get_weather_stream, arguments: { city: 杭州 } } }预期返回流式响应逐步输出data: {type:city,data:杭州}data: {type:temperature,data:28.3°C}data: {type:humidity,data:65%}data: {type:wind_speed,data:4.2m/s}## 总结本文通过完整代码演示实现了基于 Solon AI 的 Streamable MCP 服务并成功部署至阿里云百炼。关键要点1.流式架构利用 Solon AI 的StreamEmitter机制将传统同步返回改为事件流大幅提升用户体验尤其是长耗时任务。2.协议兼容通过 SSE 传输模式完美兼容 MCP 标准可与任何支持 MCP 的 LLM 框架如 LangChain、AutoGPT集成。3.生产部署借助阿里云百炼的容器编排能力实现自动扩缩容、健康检查与日志监控满足企业级可靠性要求。建议后续扩展增加认证鉴权JWT、工具注册中心动态加载工具、以及基于 Redis 的流式结果缓存进一步提升服务能力。

相关新闻

企业AI知识库技术架构深度解析:从异构存储到RAG管线的全链路设计

企业AI知识库技术架构深度解析:从异构存储到RAG管线的全链路设计

企业AI知识库技术架构深度解析:从异构存储到RAG管线的全链路设计 引言 2024年以来,大语言模型(LLM)的能力边界不断拓展,但一个残酷的事实始终没有改变:通用大模型无法替代企业私有知识。当一家拥有20年历史…

2026/7/28 1:56:24 阅读更多 →
05-CLI与TUI-两种界面随心使用

05-CLI与TUI-两种界面随心使用

05 CLI与TUI——两种界面随心使用 开场场景:一个工具,两种面孔 有人喜欢极简——打开终端,敲个命令,完事。干净利落,没有多余的干扰。 有人喜欢全面——一个漂亮的界面,信息布局清晰,鼠标键盘都能操作,一切尽在掌控。 这两种需求,Hermes 用两种界面模式同时满足。…

2026/7/28 1:55:24 阅读更多 →
Java数组核心语法与实战技巧详解

Java数组核心语法与实战技巧详解

1. Java数组基础:从零开始掌握核心语法数组是Java编程中最基础也是最重要的数据结构之一。作为刚接触Java的新手,理解数组的运作原理和掌握其基本操作,是后续学习集合框架、算法等高级内容的重要基石。本文将带你从零开始,全面掌握…

2026/7/28 1:55:24 阅读更多 →

最新新闻

Android平台OPC UA服务器开发:Eclipse Milo实现与工业自动化应用

Android平台OPC UA服务器开发:Eclipse Milo实现与工业自动化应用

在工业自动化领域,OPC(OLE for Process Control)技术扮演着至关重要的角色,它解决了不同厂商设备和软件系统之间的数据交换难题。对于初创团队而言,从项目第一天就实现盈利是一个极具挑战性的目标,而OPC技术…

2026/7/28 2:16:30 阅读更多 →
2024年最值得关注的Top-AI-Tools:从艺术创作到生产力工具全解析

2024年最值得关注的Top-AI-Tools:从艺术创作到生产力工具全解析

2024年最值得关注的Top-AI-Tools:从艺术创作到生产力工具全解析 【免费下载链接】Top-AI-Tools Curated list of AI Tools 项目地址: https://gitcode.com/gh_mirrors/to/Top-AI-Tools Top-AI-Tools是一个全面的、社区策划的目录,旨在收录和展示最…

2026/7/28 2:16:30 阅读更多 →
地图矢量切片常用的几种开源方案

地图矢量切片常用的几种开源方案

主流矢量切片服务端对比:GeoServer、TileServer GL、FoxGIS Server Lite、Martin 安装部署与优劣势分析 矢量切片(Vector Tiles)作为WebGIS领域的核心技术,凭借轻量化、样式可定制、跨端适配性强等优势,已逐步取代传统…

2026/7/28 2:16:30 阅读更多 →
TileLang与TVM:Python DSL实现GPU高性能计算与Tensor Core优化

TileLang与TVM:Python DSL实现GPU高性能计算与Tensor Core优化

在深度学习模型规模不断扩大的今天,如何高效利用GPU计算资源成为了开发者面临的核心挑战。传统CUDA编程门槛高、优化复杂,而现有高级框架往往难以充分发挥硬件潜力。TileLang作为一种创新的Python领域特定语言(DSL),通…

2026/7/28 2:16:30 阅读更多 →
BQ27542-G1系统控制功能详解:SHUTDOWN与INTERRUPT模式配置实战

BQ27542-G1系统控制功能详解:SHUTDOWN与INTERRUPT模式配置实战

1. 项目概述与核心价值在嵌入式系统,尤其是依赖电池供电的便携式设备中,电池管理单元(BMU)的“大脑”角色至关重要。它不仅要精准计量电量,更要像一个尽职的哨兵,时刻监控电池的健康状态,并在关…

2026/7/28 2:16:30 阅读更多 →
最长回文子串:从暴力枚举到中心扩散,华为OD机试高频题解析

最长回文子串:从暴力枚举到中心扩散,华为OD机试高频题解析

1. 项目概述:从一道经典机试题看算法实战最近在帮几个准备华为OD机试的朋友做模拟练习,发现“最长回文字符串”这道题出现的频率相当高。这题乍一看是个经典的字符串处理问题,但真要把它在机试那种紧张、限时的环境下又快又稳地做出来&#x…

2026/7/28 2:15:30 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻