操作场景
轻量消息(Lite Topic)是消息队列 RocketMQ 提供的一种高级消息类型,Lite Topic 在兼容原有主题模型的基础上,实现了二级数据隔离、单客户端排他订阅、自动生命周期管理等能力,支持单实例百万级主题规模,是 AI 原生应用、多 Agent 协作、会话级任务隔离等场景的理想选择。
典型应用场景
场景 1:多 Agent 异步协作
业务痛点
主 Agent 调用子 Agent 走 HTTP/RPC 同步调用,下游处理慢就会阻塞上游, 任务链越长越脆弱:一个 Agent 抖动,整条任务链中断;一个 Agent 故障,整次任务作废。
Lite Topic 解法
主 Agent 把子任务派发到每类子 Agent 的专属 Lite Topic,子 Agent 异步消费并把 结果回写到统一的事件流主题。事件流天然保序 + 可回放,Supervisor 进程重启也能从位点 继续推进,不丢任务上下文;新增一类子 Agent 只需订阅新 Lite Topic,无需改造主控代码。
典型客户场景
AI 编程助手:上下文检索 → 任务规划 → 代码生成 → 沙箱测试 → 评审
行业研究 Agent:信息检索 → 上下游分析 → 内容整合 → PPT 生成
营销内容工厂:文案生成 → 配图生成 → 审核 → 多平台分发
场景 2:用户会话级隔离 + LLM 流式断线续传
业务痛点
AI 助理类产品上线后会面临两个维度的硬挑战:
横向:百万用户并发使用,A 公司的会话不能被 B 公司的大批量请求拖慢
纵向:单次长对话/长报告生成可达数十分钟,期间网络抖动、网关升级几乎必然发生, 传统 SSE / WebSocket 一旦断开,用户要么丢内容、要么从头再生成一次,体验和算力双输
Lite Topic 解法
为每个用户会话动态创建一条独立的 Lite Topic(用完即销毁),LLM 推理节点按序写入 token, SSE 网关独占消费并推送给前端浏览器。
横向:会话间通过 Lite Topic 在基础设施层硬隔离,不受相邻租户影响
纵向:断线重连后,浏览器携带本地 offset,新网关从断点位置精确续推 token, 用户感知"网络恢复后接着看",已生成的 token 零浪费
典型客户场景
企业级 AI 助理:会议纪要 / 长文写作 / 数据洞察报告
AI 客服 / 智能问答:多轮长对话流式输出
多租户 SaaS:百万级在线会话独立通道
场景 3:RAG 知识库增量同步
业务痛点
企业级 RAG 系统中,海量租户 × 海量知识库的增量更新是数据底座最头疼的环节:
文档"先删后增"的事件被 HTTP 推送打乱顺序,向量库出现"幽灵数据"
慢租户的批量更新堵塞共享队列,拖垮快租户的实时性 SLA
长尾冷租户的元数据持续占用资源,难以自动清理
Lite Topic 解法
为每个租户的每个知识库自动创建一条 Lite Topic,文档变更事件按发生顺序追加写入, Embedding Worker 独占消费并按序更新向量库。
保序:删除 v1 → 新增 v2 在协议层保证顺序,不会出现"幽灵数据"
隔离:租户间在 Broker 层硬隔离,慢租户不影响快租户
零运维:长尾冷租户 TTL 自动回收,百万级知识库元数据零运维
典型客户场景
企业级 RAG 知识库:企业 Wiki / 协作文档 / 自研 CMS 实时同步到向量库
AI 搜索 / 智能问答的数据底座
多租户 SaaS 的私有知识库管理
场景 4:MCP Server 长耗时工具调用异步化
业务痛点
MCP 协议下,Tool 执行可能是图像生成、视频渲染、深度研究、大表聚合查询等耗时数十秒 到数分钟的重操作。Agent 同步等待会被长时间挂起,资源利用率低、链路脆弱、超时频发。
Lite Topic 解法
MCP Server 内部为每次长任务创建一条专属 Lite Topic,Worker 异步执行并按序写入 进度通知 → 中间产物 → 最终结果,MCP Server 按序消费并通过 MCP 协议的 progress notification 回传给 Agent。Agent 在等待期间释放线程,可继续处理其他任务。
典型客户场景
多模态生成类 Tool:文生图 / 文生视频 / 文生 3D
数据分析类 Tool:BI 大表聚合查询、深度搜索(Deep Research)
工程类 Tool:代码沙箱构建、自动化测试、大文件处理
功能优势
对比项 | Lite Topic(轻量消息) | 普通 Topic |
消息模型 | 两级模型:Topic + Lite Topic,二级 Lite Topic 默认自动创建,单实例可达百万级 | 单层 Topic,需预先创建(除非开启自动创建开关),单实例支持数千个 Topic |
生命周期管理 | 全自动管理。基于 TTL 自动创建与删除,TTL 内无新消息写入即自动清理 | 需手动管理,仅部分高级版本支持 Topic 级别消息保留时间设置 |
顺序性 | 每个 Lite Topic 底层一个队列,生产、消费、存储均天然有序 | 默认多队列,需通过 Message Group + 分区顺序消费机制保障顺序性 |
订阅管理 | 弱化 Group 限制。同一 Group 下不同消费者可订阅不同 Lite Topic,支持动态增删订阅 | 同一 Group 下消费者订阅关系需保持一致,无动态订阅能力 |
消费模式 | 支持共享消费(Shared)与排他消费(Exclusive)两种模式,适配会话保持场景 | 仅共享消费模式,Consumer Group 下消费者均衡消费 |
可观测性 | 支持消息轨迹,Lite Topic 维度独立指标,可按 Topic 聚合监控 | 支持消息轨迹与堆积、生产/消费速率等基础指标 |
技术实现原理
概念模型
RocketMQ 的 Lite Topic 与 Topic(ParentTopic)存在逻辑上的层级关系:每个 Lite Topic 都从属于一个 Topic,而一个 Topic 可以关联多个 Lite Topic。Lite Topic 作为实际的消息存储载体,Topic 则承担路由注册与业务隔离的角色。

生命周期
Lite Topic 的整个生命周期无需业务侧关注,支持全自动化管理:
发送时自动创建:客户端发送消息时,Broker 检查 Lite Topic 是否已存在,若不存在则自动创建。
过期后自动删除:创建 Topic 时设置 TTL,所有关联 Lite Topic 共享该 TTL。若某 Lite Topic 中最近一条消息的写入时间距当前已超过 TTL,则该 Lite Topic 被视为过期,进入后台异步清理流程(删除消费位点、消费索引以及内存中相关订阅关系)。
消息存储
Lite Topic 的消费索引构建体系直接复用 RocketMQ 的 LMQ(Light Message Queue)能力。所有发送到 Lite Topic 的消息均追加写入存储层的同一物理队列,保证全局有序性。当 Broker 节点重启或单机故障时,写入流量自动切换至集群内其他可用节点,优先保障服务可用性。在内核存储层面,Lite Topic 与传统 Topic 无结构性差异,显著降低维护与运维成本。
订阅与分发
客户端维度订阅管理
与传统基于 Consumer Group 维护订阅关系的模型不同,Lite Topic 将订阅关系下沉到客户端维度(ClientId)进行管理。由于不再强依赖 Consumer Group 内部一致性状态,订阅模型天然更轻量,在百万级 Lite Topic 规模下仍可保持较低的订阅状态管理开销。
事件驱动的合并拉取
新消息写入 Lite Topic 并完成索引构建后,Broker 立即分发就绪事件(Ready Event)给相关订阅者。每个订阅者维护一个独立的就绪事件集合(Ready Event Set),记录其所订阅全部 Lite Topic 的就绪事件。客户端发起 POP 请求时,Broker 直接从就绪事件集合中读取就绪消息,一次请求即可合并拉取多个 Lite Topic 的消息,避免对存储层产生大量无效查询。
排他消费模式
传统 RocketMQ 采用共享消费模式(Shared),Consumer Group 下所有客户端均衡消费 Topic 中的消息。为更好地适配 Lite Topic 的会话保持场景,RocketMQ 提供了全新的排他消费模式(Exclusive):发送给 Lite Topic 的消息只会被 Consumer Group 下的其中一个客户端独占消费。开启排他消费模式后,Broker 默认选择最新连接的客户端作为 Lite Topic 的独占消费者,并通知旧客户端取消订阅。
操作指南
步骤一:登录控制台并进入 RocketMQ 集群
1. 登录腾讯云RocketMQ 控制台。
2. 在左侧导航栏选择 Topic 管理页签,选择好地域和集群后,单击新建进入创建 Topic 页面。
3. 在新建 Topic 对话框中,填写以下信息:
参数 | 是否必选 | 说明 |
Topic 名称 | 是 | 填写 Topic 名称(创建后不可修改),3-100个字符,只能包含字母、数字、“%”、“-”及“_” |
类型 | 是 | 选择“轻量消息”类型,该 Topic 即作为 Lite Topic 上一级的 Topic。后续业务程序向其发送消息时,Broker 会根据客户端指定的 Lite Topic 名称自动创建二级 Lite Topic,无需在控制台手动创建。 |
标签 | 否 | |
Lite Topic 自动删除 | 否 | 打开自动删除开关后,如果某个 Lite Topic 在过期时间内没有新消息写入,服务端将自动删除该 LiteTopic,未消费的消息也随之过期。 |
Lite Topic 过期时间 | 否 | 范围 30分钟至12小时 |
消息保留时间 | 是 | 消息持久化后的保留时间,过期不论是否消费均删除。仅 5.x 专业版以及铂金版集群支持在 Topic 维度调整消息保留时间,5.x 体验版和基础版集群和4.x 集群支持在集群维度进行调整。 |
Topic 说明 | 否 | 填写 Topic 的说明信息,最长128个字符。 |
说明:
当前仅 5.x 集群支持 Lite Topic。如您当前的 5.x 集群没有创建“轻量消息” Topic 类型入口,请提交工单联系腾讯云,服务团队会将您的集群升级到最新版本。
要使用 Lite Topic 进行消息生产和消费,客户端需要使用 5.x gRPC SDK。
4. 单击提交,完成创建。
步骤二:创建用于消费 Lite Topic 的 Consumer Group
1. 登录腾讯云RocketMQ 控制台。
2. 在左侧导航栏选择 Group 管理页签,选择好地域和集群后,单击 新建 进入创建 Group 页面。
3. 在新建 Group 对话框中,填写以下信息:
参数 | 说明 |
当前集群 | Group 所属的集群,不支持修改。 |
Group 名称 | 填写 Group 名称(创建后不可修改),需符合命名规则:3-100个字符,只能包含字母、数字、“%”、“-”及“_”。 |
标签 | |
消费模式 | 选择 Lite Topic 消费。因为在轻量消息的消费场景下,Group 的作用和其他消息类型不一样,因此在创建 Group 时,消费 Lite Topic 的 Group 需要和普通 Group 区分。 |
订阅的 Topic | 选择该 Group 订阅的 Topic,为了便于订阅关系的管理,当前仅支持定义一个 Topic(Lite Topic 上层的 Topic)。 |
投递顺序性 | Lite Topic 内消息消费严格有序,默认展示顺序投递。 |
开启消费 | 关闭后 Group 下的所有消费会暂停,重新开启可继续消费。可用于系统运维,对消费者组进行流控与故障隔离,以实现集群级别的保护与平滑操作。 |
重试策略 | Lite Topic 顺序投递仅支持“固定间隔”,即消息将按照设置的间隔进行重试 |
固定重试间隔 | Lite Topic 内的消息默认重试间隔为 1 秒,避免实际发生重试时,间隔时间过长后引起后续消息的大量积压。 |
Group 说明 | 填写 Group 说明信息,最长 128 个字符。 |
说明:
排他消费模式(Exclusive)是 Lite Topic 的核心能力之一。开启后,对于同一个 Lite Topic,Broker 仅允许 Group 下最新连接的客户端独占消费,旧客户端将被自动取消订阅,非常适合 Agent 会话保持等场景。
步骤三:查看自动创建的 Lite Topic 列表
客户端发送消息后,服务端会自动创建 Lite Topic。进入 Topic 详情页,切换到 Lite Topic 列表 标签页,即可看到所有由生产端写入触发自动创建的 Lite Topic。列表中默认展示近期活跃的 Lite Topic,如果 Lite Topic 数量较多,可以在搜索框通过对应的 Lite Topic 名称查找对应的 Lite Topic,列表展示 Lite Topic 的以下信息:
Lite Topic 名称(生产者客户端指定时自动创建)
消息堆积条数
消费者个数

其他消息相关的功能,如消息查询,消息轨迹展示,订阅关系查看等和其他 Topic 一致。
代码示例
说明:
只有 5.x gRPC SDK 支持轻量消息,且需要升级到较新的版本:Java SDK ≥ v5.1.0、Go SDK ≥ v5.1.4,您可以通过开源 SDK 版本发布记录来查询更多编程语言的最小支持版本。
发送轻量消息
final String topic = "{Topic_Name}"; // 您在控制台创建的【轻量消息】类型的 Topic 名称final String accessKey = "{Access_Key}"; // 您在控制台创建的角色的 AccessKeyfinal String secretKey = "{Secret_Key}"; // 您在控制台创建的角色的 SecretKeyfinal String endpoints = "{EndPoints}"; // 控制台展示的集群接入点final SessionCredentialsProvider sessionCredentialsProvider = new StaticSessionCredentialsProvider(accessKey, secretKey);final ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder().setEndpoints(endpoints).setCredentialProvider(sessionCredentialsProvider).enableSsl(false).build();final Producer producer = provider.newProducerBuilder().setClientConfiguration(clientConfiguration).setTopics(topic).setMaxAttempts(3).build();final byte[] body = "This is a lite message of TDMQ RocketMQ".getBytes(StandardCharsets.UTF_8);final Message message = provider.newMessageBuilder().setTopic(topic).setLiteTopic("{Lite_Topic_Name}") // 首次发送时会自动创建.setBody(body).build();try {final SendReceipt sendReceipt = producer.send(message);log.info("Sent lite message successfully, messageId {}", sendReceipt.getMessageId());} catch (Throwable t) {log.error("Failed to send lite message {}, please try again", message, t);}// 您需要在业务进程退出前(或者不再发送消息后)关闭 Producerproducer.close();
消费轻量消息
final String topic = "{Topic_Name}"; // 您在控制台创建的【轻量消息】类型的主题名称final String consumerGroup = "{Consumer_Group_Name}"; // 您在控制台创建的消费组名称,注意:需要绑定正确的【轻量消息】类型主题final String accessKey = "{Access_Key}"; // 您在控制台创建的角色的 AccessKeyfinal String secretKey = "{Secret_Key}"; // 您在控制台创建的角色的 SecretKeyfinal String endpoints = "{EndPoints}"; // 控制台展示的集群接入点final SessionCredentialsProvider sessionCredentialsProvider = new StaticSessionCredentialsProvider(accessKey, secretKey);final ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder().setEndpoints(endpoints).setCredentialProvider(sessionCredentialsProvider).enableSsl(false).build();final LitePushConsumer litePushConsumer = provider.newLitePushConsumerBuilder().setClientConfiguration(clientConfiguration).setConsumerGroup(consumerGroup).bindTopic(topic).setMessageListener(messageView -> {// 业务消费代码log.info("Consumed messageId {}", messageView.getMessageId());return ConsumeResult.SUCCESS;}).build();try {litePushConsumer.subscribeLite("{Lite_Topic_Name}");// 您可以继续订阅更多的 Lite Topic} catch (Throwable t) {log.error("Failed to subscribe lite topics, please try again", t);}// 您需要在业务进程退出前关闭 ConsumerlitePushConsumer.close();