协议与兼容性参考
兼容性描述两个端点、版本、配置和操作之间的关系。请求码相同或普通消息发送成功,不能证明所有客户端 API、管理命令、共识协议或磁盘格式均兼容。本页用于在选择部署或迁移路径前,明确应用实际依赖的接口范围。
选择正确端点
| 端点 | 协 议接口 | 典型操作 | 边界 |
|---|---|---|---|
NameServer remoting 监听器,通常为 9876 | RocketMQ remoting | Broker 注册及路由/KV 查询 | 提供路由服务,不是 Proxy 的 gRPC MessagingService。 |
Broker remoting 监听器,通常为 10911;快速端口通常为 10909 | 由已注册 Broker 处理器处理的 RocketMQ remoting | 发送、拉取/POP、偏移量、元数据和管理操作 | 请求枚举已有定义,不代表所选处理器/模式一定处理该请求。 |
Broker HA 监听器,通常为 10912 | 所选模式的 HA 复制路径 | 主日志复制与进度 | 不是客户端发送端口,也不是可任意互换的 Java/Rust HA 契约。 |
Proxy gRPC 监听器,通常为 8081 | apache.rocketmq.v2.MessagingService | 路由、发送、分配、接收/ACK、拉取/偏移量、事务及遥测方法 | 要求 API 模型、客户端元数据、所选后端及操作支持相匹配。 |
可选 Proxy remoting 监听器,通常为 8080 | Proxy remoting 适配器 | 经 Proxy 执行受支持的 remoting 操作 | 默认禁用,与 gRPC 及直接连接 Broker 不同。 |
| Controller remoting 监听器 | 面向 Broker 的控制与管理接口 | Controller 元数据、角色/选举及同步状态操作 | 与 Controller 内部 Raft 传输独立。 |
| Controller Raft 端点 | Rust OpenRaft gRPC | 已配置 Rust Controller 节点之间的共识 | 不提供 Java JRaft/DLedger 成员关系或持久化状态兼容性。 |
这些是常用默认值,不是服务发现说明;应检查实际配置与公布地址。Controller 示例有意显式配置独立的 remoting 和 Raft 端口。具体见服务配置与部署总览。
remoting 线协议契约
帧包含总长度、序列化类型与头部长度组合字段、头部字节及可选消息体。组合字段的高 8 位标识序列化类型,低 24 位保存头部长度。JSON 与 RocketMQ 二进制头部编码不同。数值请求/响应码、关联字段、标志、扩展键名、字段宽度及消息体编解码,都是兼容性接口。
RemotingCommandFactory 持有不可变的版本和序列化默认值。初始化应用默认值不会追溯修改已构造的工厂。运行时语言标记 RUST 是元数据,不代表另一套分帧协议。消息压缩、CRC 处理、v1/v2 主题编码及消息体/属性解码也必须与所选路径匹配,仅头部兼容并不足够。
具体见请求码、响应码与传输层设计。不支持的请求和无效编码应产生对应的明确结果;无限重连不会使不支持的协议变为受支持。
gRPC 契约与业务状态
仓库的服务模型定义 QueryRoute、SendMessage、QueryAssignment、流式 ReceiveMessage/PullMessage、确认和偏移量 API、事务完成、客户端遥测、召回及 Lite 订阅方法。模型定义消息与 RPC 签名,具体请求是否可执行则由 Proxy 后端与所选 Broker 能力决定。
即使 gRPC 传输调用成功,仍应检查响应中的 RocketMQ 状态及逐项状态。特别是,SendMessageResponse 同时包含总体状态与重复结果条目。流式方法既可以传递状态记录,也可以传递消息;若将每个收到的条目都当作业务消息,会丢失失败信息。
回执句柄与不可见时间属于 POP 式投递,不能与经典拉取的队列偏移量互换。结束事务请求被成功接受,不能证明全部事务恢复/检查行为已完成。客户端身份元数据、认证、TLS、消息体限制、批量及 gzip 接纳条件均是独立请求约束。应结合具体 Proxy 示例与错误参考理解。
按接口范围判断兼容性
| 接口范围 | 保留的可识别概念 | 需要独立核对的内容 |
|---|---|---|
| Rust 源码 API | 生产者、消费者、消息、路由和结果等公共概念 | 当前 crate 导入、feature 标志、方法签名及运行时注入。线协议兼容不能使私有 Rust 模块导入继续编译。 |
| 普通客户端 remoting | 已实现路径中的 RocketMQ 分帧、强类型头部、响应码和消息语义 | 精确客户端/服务端版本、序列化、压缩、TLS/ACL、主题类型及操作。 |
| 高级消息语义 | 事务、顺序、过滤、延迟/召回、POP 与 Lite 概念 | Broker 配置、当前操作支持、消费者组/请求模式、重试与提交行为。 |
| 管理 API | 熟悉的主题、消费者组、配置和偏移量操作 | 实际 CLI 层级、参数、已注册命令、权限、部分结果处理,以及运行时变更与持久化变更的区别。 |
| 配置 | 部分 Java 兼容字段名及显式 Broker properties 转换 | 规范 TOML 配置段、类型、默认值、被拒绝字段和转换报告。复制的 Java 文件不会自动成为有效 Rust 配置。 |
| 主存储与派生存储 | CommitLog、队列和索引概念 | 段大小、记录版本、派生后端、源纪元、定时/POP/压缩/分层元数据及恢复所有权。 |
| 默认 HA | 主从副本概念 | 精确复制实现与确认/故障场景,不能仅凭概念推断混合实现已完成验证。 |
| Controller HA | 主节点选举与同步状态的功能结果 | Rust 写权限/租约契约、OpenRaft 成员关系、内部传输与持久化。Java 内部协议与混合法定多数派兼容性不在范围内。 |
| 运维产品 | 集群和资源词汇 | Dashboard、MCP、SRE 的 API/认证/状态模型拥有独立版本,不属于核心消息发行范围。 |
SQL 过滤同时依赖客户端选择器与 Broker 属性过滤支持。LitePull 的本地偏移量提交、远端提交、Broker 持久化及业务副作用完成,是不同阶段。复制中的请求接纳、本地持久化进度与副本确认也是不同阶段。即使两种实现接受相同字节,这些仍属于独立行为条件。