十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用 Apache Dubbo 把现有 Triple 服务暴露为 MCP Server 并验证工具注册

如何用 Apache Dubbo 把现有 Triple 服务暴露为 MCP Server 并验证工具注册 如何用 Apache Dubbo 把现有 Triple 服务暴露为 MCP Server 并验证工具注册【免费下载链接】dubboThe java implementation of Apache Dubbo. An RPC and microservice framework.项目地址: https://gitcode.com/GitHub_Trending/du/dubbo如果你已经有一套运行在 Tripletri协议上的 Dubbo 服务想让 MCP 客户端如 LLM 应用直接把这些服务方法当作 MCP 工具调用而不是另起一个独立 MCP Server可以在 Provider 侧启用 Apache Dubbo 的dubbo-mcp模块Dubbo 会在应用启动时创建一个 MCP Server把已导出的 Triple 服务方法注册为 MCP 工具并通过 tri 协议对外提供 MCP 端点。仓库中dubbo-demo/dubbo-demo-mcp-server是一个可运行的完整示例本文以它为主路径说明开启方式、服务标记方式以及启动后如何确认工具已注册。前提条件使用仓库源码集成时从仓库根目录构建。根README.md的版本表显示 3.3.7-SNAPSHOT 支持 JDK 1.8 – 25demo 模块的 pom 配置了spring-boot-maven-plugin2.7.18并在 JDK 17 时通过 profilejdk-version-ge-17追加dubbo-spring-boot-3-autoconfigure依赖因此 Spring Boot 2.x 与 3.x 环境均可运行。服务必须以 Triple 协议导出。示例的协议配置为dubbo.protocol.name: tri端口50055。引入 dubbo-mcp 依赖参考 demo 的 pom.xml核心依赖如下dubbo-mcp是关键项其余为 Triple/REST/启动所需dependencies dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-rpc-triple/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-triple-servlet/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-rest-openapi/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-mcp/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-config-spring/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-spring-boot-autoconfigure/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter/artifactId /dependency /dependenciesdemo 中这些org.apache.dubbo依赖的版本均为${project.version}随源码一起构建如果你基于已发布的 Dubbo 版本集成把版本改为你使用的 Dubbo 版本号即可。demo 还额外依赖了dubbo-registry-zookeeper、dubbo-remoting-netty4、dubbo-serialization-hessian2其application.yml中并没有配置注册中心示例按本地方式运行。开启 MCP Server 配置示例的 application.yml 全文如下spring: application: name: dubbo-mcp-server dubbo: application: name: ${spring.application.name} qos-enable: false protocol: name: tri port: 50055 triple: verbose: true rest: openapi: enabled: true mcp: enabled: true protocol: streamable逐项说明dubbo.protocol.name: triport: 50055MCP 服务通过 tri 协议导出。当没有单独指定 MCP 端口时MCP 端点复用该协议端口见下文端口解析逻辑。dubbo.protocol.triple.rest.mcp.enabled: trueMCP Server 总开关。不打开时应用启动日志会打印MCP service is disabled, skipping initialization且不会注册任何工具。dubbo.protocol.triple.rest.mcp.protocol: streamableMCP 传输方式取值streamable或sse。McpApplicationDeployListener 中这两种值分别构建 Streamable 或 SSE 传输其他值会记录not support protocol xxx错误MCP Server 不会创建。dubbo.protocol.triple.rest.openapi.enabled: true同时开启 REST OpenAPI。工具转换类DubboOpenApiToolConverter依赖DefaultOpenAPIService提供的方法元数据来生成工具。MCP 相关的完整配置项定义在 McpConstant 中除上面用到的两项外还包括配置键用途dubbo.protocol.triple.rest.mcp.port单独指定 MCP 服务端口dubbo.protocol.triple.rest.mcp.session-timeout长连接会话超时代码默认 60dubbo.protocol.triple.rest.mcp.include-patterns/exclude-patterns服务级暴露过滤模式dubbo.protocol.triple.rest.mcp.default.enabled服务未显式声明时的默认启用状态dubbo.protocol.triple.rest.mcp.path.sse/path.messageSSE 与消息路径McpConfig 的说明给出默认值分别为/mcp/sse和/mcp/message将现有 Triple 服务标记为 MCP 工具示例服务 HelloServiceImpl 通过DubboService(mcpEnabled true)声明该服务可暴露为 MCP 工具DubboService(mcpEnabled true) public class HelloServiceImpl implements HelloService { Override public String sayHello(String name) { System.out.println(HelloServiceImpl.sayHello called with: name); ... } ... }注册逻辑在 DubboServiceToolRegistry服务导出时遍历服务接口声明的方法由McpServiceFilter判断每个方法是否暴露通过的方法逐一注册为工具。除注解外McpConstant中还定义了按服务 URL 参数粒度的控制项mcp.enabled、mcp.tool-name、mcp.description、mcp.tags、mcp.priority用于对单个服务做开关与工具命名、描述调整。工具的默认描述模板为Execute method %s from service %s。应用入口 McpDemoApplication 是一个标准 Spring Boot 应用加上EnableDubbo即可SpringBootApplication EnableDubbo public class McpDemoApplication { public static void main(String[] args) { SpringApplication.run(McpDemoApplication.class, args); } }启动应用从仓库根目录执行假设本地 Maven 可访问依赖仓库-am会连带构建 demo 所依赖的 Dubbo 模块# 1. 构建并安装 demo 依赖的模块 ./mvnw -pl dubbo-demo/dubbo-demo-mcp-server -am install -DskipTests # 2. 启动 MCP demo 应用 ./mvnw -pl dubbo-demo/dubbo-demo-mcp-server spring-boot:runMCP 的初始化由McpApplicationDeployListener在应用onStarted阶段完成读取dubbo.protocol.triple.rest.mcp.enabled构建 MCP Server遍历所有已导出的ProviderModel逐个注册工具再把 MCP 端点作为内部服务以 tri 协议导出。验证工具注册启动完成后从日志和端点两个层面确认初始化日志。依次出现以下日志说明 MCP Server 已建立且工具已注册其中{}为实际数量{接口名}为服务接口Initializing MCP server and dynamic service registration MCP server initialized successfully, {} existing tools registered, dynamic registration enabled MCP service exported on: {}demo 的HelloService接口声明了sayHello与greetComplex两个方法若均通过McpServiceFilter的暴露条件日志中的数量应为 2。MCP service exported on:后跟的是导出 URL从中可以确认 MCP 端点的地址与端口——demo 未单独配置mcp.port因此复用 tri 协议端口50055。动态注册日志。启动后新导出的服务会触发 McpServiceExportListener 的动态注册Dynamically registered {} MCP tools for exported service: {}MCP 客户端连接。按所选protocol连接对应端点streamable模式下消息路径默认/mcp/message即http://host:50055/mcp/messagesse模式下为/mcp/sse。客户端通过 MCP 协议列出工具时应能看到由服务方法生成的工具项调用工具后会走 Dubbo 泛化调用打到服务端实现demo 实现里会打印HelloServiceImpl.sayHello called with: name据此可确认调用链路贯通。端口解析顺序见McpApplicationDeployListener.getRegisterPort优先取dubbo.protocol.triple.rest.mcp.port未配置时取name: tri的协议端口再没有则取一个随机可用端口。边界与限制protocol只支持streamable与sse两种取值其他值会记录not support protocol错误并跳过 MCP Server 创建。dubbo.protocol.triple.rest.mcp.enabled未开启时不会初始化任何 MCP 能力日志为MCP service is disabled, skipping initialization此时连接任何 MCP 端点都不会有工具可列。工具是否暴露由McpServiceFilter决定除服务上的mcpEnabled/mcp.enabled外还受include-patterns、exclude-patterns与default.enabled影响方法未通过过滤时该服务不会注册出工具日志中也不会出现对应数量的注册记录。【免费下载链接】dubboThe java implementation of Apache Dubbo. An RPC and microservice framework.项目地址: https://gitcode.com/GitHub_Trending/du/dubbo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表