前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TDMQ for RocketMQ MCP Server 实战,一站式查询提升运维效率

TDMQ for RocketMQ MCP Server 实战,一站式查询提升运维效率

作者头像
腾讯云中间件团队
发布于 2025-04-18 04:42:51
发布于 2025-04-18 04:42:51
9300
代码可运行
举报
运行总次数:0
代码可运行

导语

在 RocketMQ 的日常运维中,我们经常需要访问不同的数据源来获取诊断信息。传统的方式往往需要编写复杂的查询语句,或者在多个系统之间切换,效率低下。为了解决这个问题,我们使用 LLM 结合 MCP 来实现高效的数据访问。通过这种方式,可以用自然语言一站式查询所需的信息,提高运维效率。

前言

在腾讯云消息队列团队日常运维 TDMQ RocketMQ 版的过程中,经常需要访问不同的数据源来获取诊断信息。一般来说运维人员如果想要获取某个数据源的信息,通常需要先登录到对应的系统,然后编写查询语句,最后再解析返回的结果。这不但需要运维人员熟悉每个数据源的查询语法,还需要在不同的系统之间切换,效率低下。

为了解决这个问题,我们可以使用 LLM 结合 MCP 来实现高效的数据访问。通过这种方式,用自然语言一站式查询所需的信息,提高问题诊断的效率。

Talk is cheap, show me the demo!

借助 LLM + Chatbox + MCP + GraphQL 的组合,可以用自然语言查询 RocketMQ 集群的状态、Topic 的信息、消息的内容等。理论上只要是在我们系统内的信息,都可以通过一次自然语言交互查出来,并且可以连续追问直到找到问题根因。再也不需要访问一大堆服务,编辑命令行参数/SQL 或者在前端界面之间跳来跳去。

场景一:查询集群信息

场景二:查询主题信息

场景三:查询消息轨迹

实现原理

LLM 大语言模型

在这个组合(LLM + Chatbox + MCP + GraphQL)中,LLM 充当了自然语言处理的核心组件。用户通过 Chatbox 输入自然语言查询,LLM 将其转换为 GraphQL 查询语句,并通过 MCP (大模型调用工具的协议,这里可以认为是 GraphQL 客户端)提交到后端服务。后端服务返回的 JSON 格式查询结果又会被 LLM 转换为人类更易懂的格式,从而实现了自然语言与数据源之间的高效交互。

Chatbox 中的对话

对应的 GraphQL 查询和结果

图中的 introspect-schema 用来获取 GraphQL 的 schema 信息,帮助 LLM 理解数据结构和字段。

实际上只需要在开始对话的时候调用一次即可,这里每次交互都调用是因为博主使用的 Chatbox 没有正确使用 MCP 协议,换成支持 MCP Resources 的工具例如 Claude Desktop 就可以避免多次请求 schema。

通过 LLM 来组织查询相比于传统的运营系统,可以节约开发大量页面的成本,能够按需获取想要查询的字段,并且自适应数据结构的演进。为了最大化利用 LLM 的查询灵活性,我们引入了 GraphQL 作为数据查询的中间层。

使用 MCP 协议提供 GraphQL 工具

道理我都懂,为什么是 GraphQL?

GraphQL 是一种用于提供 API 的查询语言,它允许客户端指定所需的数据结构和字段。我们使用 GraphQL 作为连接 LLM 和所有数据源的桥梁: LLM 使用 GraphQL 描述要查询的数据,在一次查询中访问多种数据源。

回忆一下本文开头列出的多种数据源,我们取其中 Runtime Data 中的 RocketMQ Broker 数据源为例,它的数据模型大致如下所示:

我们将这个数据模型组织成一个树状的结构,GraphQL 的查询语法非常适合这种树状结构的查询:可以通过 GraphQL 的嵌套查询来获取 Broker、Topic、Queue 和 Message 之间的关系。

例如,我们可以通过以下的 GraphQL 查询语句来获取 Broker_One 中 Topic_A 的队列 0 的相关信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
query {
  # 查询 Broker节点 Broker_One
  brokers(name: "Broker_One") {
    # 查询该 Broker 节点的接入点
    addr
    # 查询 Broker 节点的配置项 messageIndexEnable
    config(name: "messageIndexEnable") {
      name
      value
    }
    # 查询该 Broker 节点的 Topic 信息:Topic_A
    topics(name: "Topic_A") {
      
      # 查询该 Topic 的队列 0
      queues(id: 0) {
        # 查询该队列的消息数(maxOffset - minOffset)
        minOffset
        maxOffset
        # 查询该队列的第 100 条消息
        messages(offset: 100) {
          id
          payload
        }
      }
    }
  }
}

这个查询会被翻译成对 RocketMQ Broker 数据源以下接口的调用:

  1. Broker 信息(接入点)
  2. Broker 配置项(messageIndexEnable)
  3. Topic 信息(队列数)
  4. Topic 队列的信息(minOffset、maxOffset)
  5. Topic 的消息(该队列第 100 条消息)

也就是说,我们通过 GraphQL 的嵌套查询语法将 5 个查询组合在一起。上面只是一个简单的例子,实际上可以组合面向不同数据源的查询。不管他们提供的是 REST API 还是 Binary Protocol 都可以合并到一个 GraphQL 查询中。对于 LLM 来说这样做尤其有意义:

简化开发:不需要为每种数据源编写单独的 MCP Server,统一使用 GraphQL 作为数据查询的中间层,用 GraphQL 的 schema 来帮助 LLM 理解数据结构。

简化查询:LLM 只需要理解 GraphQL 的查询语法,而不需要了解每个数据源的具体实现细节。对于复杂的查询可以有效降低 LLM 的理解难度,减少出错的概率。

减少查询次数:通过一次 GraphQL 查询,可以获取多个数据源的信息,减少了多次 LLM 调用的 Token 开销。

降低上下文开销:不需要组织多次查询,也不需要输入多种 MCP tools 的参数和用法。可以将 LLM 有限的上下文用于描述问题的本质。

灵活变更数据结构:GraphQL 自带 schema,对于 LLM 来说可以通过 schema 来获取数据的字段和不同数据结构之间的关系。简而言之我们提供的查询接口是自描述的,可以随时增加新的数据结构,LLM 也能自动适应。

总结与后续展望

通过 LLM + Chatbox + MCP + GraphQL 的组合,我们实现了对多个异构数据源的高效查询。用户不需要具备大量的排查经验和对系统的深入理解,只需要用自然语言描述所需的信息,系统就能自动生成查询语句并返回结果。这种方式不仅提高了排查问题效率,还降低了对运维人员的技术要求。

目前我们实现了 LLM 高效访问数据,并且通过 GraphQL 的 Schema 能够理解多种数据结构之间的关联。下一步我们将继续迭代这个系统,将我们问题排查的专家经验以知识库的形式输入到 LLM 中,不仅能帮助 LLM 理解数据,更能理解问题的本质,最终实现一个一站式问题排查系统,让 LLM 能够自动化地完成问题排查的工作。

后续腾讯云消息队列团队会将这套 MCP Server 方案贡献到 Apache RocketMQ 社区,致力于与 RocketMQ 社区共建 MCP 标准,共同打造业内最好的业务消息中间件

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云中间件 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
TP入门第九天
1、验证码 TP2.0的使用网上一大堆教程,这里只是简单介绍下,把org目录拷贝到thinkphp目录的lib目录下,然后导入到生成验证码页面即可 TP3.0需要把org文件存放在tp的Extend/Library目录下 function yzm() {   import(‘ORG.Util.Image’); Image::buildImageVerify(); } 具体参数可以参考手册进行深刻了解 2、图片添加水印 public function mm(){ import(“ORG.Util.I
苦咖啡
2018/05/07
9060
Thinkphp3.2简单解决多文件上传只上传一张的问题
好多人在进行多文件上传的时候,最后发现只是上传了一张,主要就是命名所致,因为是同样的名字,所以最后就剩一张图片 解决方法:第一种:
用户2323866
2021/07/08
5570
如何用Postman测试文件或图片上传
虽然现在很多都是使用大平台的对象存储存放应用中的文件,但有时小项目还是可以使用以前的方式上传到和程序一起的服务器上,强调一下这里是小众需求,大众可以使用阿里云的OSS,腾讯的COS,七牛的巴拉巴拉xxxxxx……
北桥苏
2024/05/30
9890
用 MiniFramework 实现文件上传功能
MiniFramework 是一款遵循 Apache2 开源协议发布的,支持 MVC 和 RESTful 的超轻量级 PHP 开发框架。
魏杰
2022/12/23
4450
TP5.0 excel 导入导出
引第三方的phpexcel类库放到 ThinkPHP\Library\Vendor\demo下,自己建的文件夹demo
全栈程序员站长
2022/07/07
5060
PHP-ThinkPHP框架学习
每个项目都有一个独立的配置文件(位于项目目录的Conf/config.php),配置文件的定义格式均采用PHP返回数组的方式,例如:
偏有宸机
2020/11/04
7K0
Java文件上传下载实训
文件上传概述 1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的。 在智联招聘上填写一个完整的简历还需要上传照片呢。 2 文件上传对页面的要求 上传文件的要求比较多,需要记一下: 1. 必须使用表单,而不能是超链接; 2. 表单的method必须是POST,而不能是GET; 3. 表单的enctype必须是multipart/form-data; 4. 在表单中添加file表单字段,即<input type=”file”…/> <form action="${pageContext.request.c
Java帮帮
2018/03/19
1.8K1
Java文件上传下载实训
ajaxFileUpload+ThinkPHP+jqGrid 图片上传与显示
jqgrid上要显示图片和上传图片的列,格式如下: {label:'图片',name:'icon',index:'icon',autowidth:true,formatter:alarmFormatter,editable:true,edittype:'custom', editoptions:{custom_element: ImgUpload, custom_value:GetImgValue}}, 注意:edittype要为custom 也就是自定义编辑格式. editoptions:{custom_
zcqshine
2018/05/11
2.4K0
ThinkPHP上传文件
<form id="upload" method='post' action="__URL__/upload/" enctype="multipart/form-data">
PM吃瓜
2019/08/13
2.6K0
Laravel踩坑日记之文件上传
本文采用CC BY-NC-SA 3.0 Unported协议进行许可,转载请保留此文章链接
Meng小羽
2019/12/23
5960
米斯特白帽培训讲义(v2)漏洞篇 文件上传
其中,浏览器通过上传页面将文件储存到服务器中。一般这些上传页面都会有限制(比如限制格式为jpg/gif/png等等,或者限制文件大小)。
ApacheCN_飞龙
2019/02/15
5280
米斯特白帽培训讲义(v2)漏洞篇 文件上传
ASP.NET Core文件上传与下载(多种上传方式)
前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经很成熟了.下个项目争取使用吧. 正文 1.使用模型绑定上传文件(官方例子) 官方机器翻译的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads 这里吐槽一下 - -,这TM的机器翻译..还不如自己看E文的.. 首先我们需要
GuZhenYin
2018/03/30
5.8K0
ASP.NET Core文件上传与下载(多种上传方式)
thinkPHP利用ajax异步上传图片并显示、删除的示例
利用原始的文件上传处理,虽然通过原始js语句能实时显示上传图片,但是这样的话会涉及很多兼容问题。使用ajax技术,实现选择性删除所选图片功能,并不会有兼容问题。
子润先生
2021/07/13
1.7K0
DiscuzX v3.4 任意文件删除漏洞
漏洞影响 DiscuzX版本 ≤ v3.4 官方于9月29日修复该漏洞: https://gitee.com/ComsenzDiscuz/DiscuzX/comm/7d603a197c2717ef1d7e9ba654cf72aa42d3e574 漏洞复现 Dz下载地址: https://gitee.com/ComsenzDiscuz/DiscuzX.git 选择一个时间线在9月29日前的进行git checkout即可。比如 git checkout 1a912ddb4a62364d1736fa4578b4
用户1467662
2018/03/30
1.1K0
DiscuzX v3.4 任意文件删除漏洞
写给新手前端的各种文件上传攻略,从小图片到大文件断点续传
今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受。这么好的光阴怎么浪费,睡觉、吃饭、打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完。
coder_koala
2019/11/04
3.3K0
写给新手前端的各种文件上传攻略,从小图片到大文件断点续传
express + multer 文件上传入门
首先利用express-generator express框架生成器生成我们的项目 这里我们采用ejs模板引擎(因为我只会这个)
Theone67
2019/11/21
1.5K0
【php详细笔记】上传文件到服务器
QQ空间里面上传图片呀 微信朋友圈上传图片 发邮件里面上传邮件资料附件 认证的时候要求上传照片或身份证 还有各种产品汪(gou)们提出的需求来分析,上传不同的东西。
20岁爱吃必胜客
2022/11/13
9.8K0
【php详细笔记】上传文件到服务器
项目之关于Summernote的图片处理和基于SpringMVC的文件上传(10)
在index.html页面,先找到整个列表区域的父级,为其添加id,以便于创建Vue对象:
海拥
2021/08/23
9830
DVWA靶机之文件上传漏洞通关笔记
文件上传漏洞通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的。
Power7089
2019/07/25
1.8K0
PHP 文件上传代码审计
只验证MIME类型: 代码中验证了上传的MIME类型,绕过方式使用Burp抓包,将上传的一句话小马*.php中的Content-Type:application/php,修改成Content-Type: image/png然后上传.
王 瑞
2022/12/28
1.1K0
相关推荐
TP入门第九天
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档