Apache RocketMQ 传输协议

总体的编码结构

rocketmq符合以下经典的字段长度的编码方案:

L1,4字节大端存储,用来表示其余部分的总大小;
L2,4字节大端存储,低三字节表示报头的大小,最重要的字节来表示报头如何序列化: 0代表 JSON,1代表自定义的格式;
Header为当前请求定义各种信息,下面将列举和详细说明。
主体是可选的二进制载体。

Header

一个 RocketMQ 请求头有两部分: 基础与额外的部分.基础部分包含字段有code,flag,language,opaque,serializeTypeCurrentRPC,version,remarkextFields.
额外字段的内容根据代码而变化,以满足每个请求的不同要求。

RoktMQ目前支持两种用于请求头的序列化方法:JSON和RocketMQ定义的自定义协议。

JSON格式的报头遵循以下结构:

{
    "code":10,
    "extFields":{ 
        "topic":"Topic_sample",
        "flag":"4", "bornTimestamp":"1534853535790", "queueId":"1",
        "batch":"false",
        "unitMode":"false",
        "sysFlag":"6", "producerGroup":"ProducerGroup_sample"
    },
    "flag":2,
    "language":"JAVA",
    "opaque":0, 
    "serializeTypeCurrentRPC":"JSON",
    "remark": "Sample remark", 
    "version":0
}

续图显示了自定义报头序列化的结构。


Code

RocketMQ通过代码定义了各种类型的请求和响应。由于社区需要新的特性,可以添加更多的内容。目前定义如下:

请求代码:
  • 10 用于当 MQ producer 要向 brokers 发消息时
  • 11 用于当 MQ consumer 要从 brokers 收消息时
  • 12 此代码用于MQ客户端,作为生产者、消费者或管理工具,尝试查询来自经纪人的消息。在额外字段中指定所有必要的信息,例如topic名称、消息的key等
  • 13 已过时
  • 14 用于查询每个consumer group、topic和队列ID的消费的偏移量
  • 15 用于更新每个consumer group、topic和队列ID的消费的偏移量
  • 17 主要被当做管理工具用作创建或更改新的topic,指定topic的配置
  • 21 用于向brokers查询所有的topic和它们的配置
  • 25 用于更新broker的配置
  • 28 用于获取代理运行时信息,包括broker版本、磁盘容量、系统负载等
  • 29 用于查询每个topic的偏移量,以便生成后续的时间戳,消息将等于或大于规定的时间戳
  • 30 获取topic/队列偏移量的最大值
  • 31 获取topic/队列偏移量的最小值
  • 32 获取仍然有效的消息的存储时间戳
  • 33 通过指定的消息ID获取消息
  • 34 客户端使用此code向brokers/name server发送心跳,brokers也使用此code发送心跳到name server,以确保存活
  • 35 客户端使用此code从brokers中注销,这是正常退出过程的一部分
  • 36 当consumer客户端无法处理消息时,他们使用此code将这些消息发送回brokers,以便将来将这些消息重新发送给consumers
  • 37 producer客户端使用此code来完成正在进行的事务性消息
  • 38 consumer客户端使用此code来查询每个consumer group的存活成员
  • 39 当一个存在事务的消息在很长一段时间内未解决时,brokers使用此code来查询替代producers以调用决策:回滚或提交
  • 40 当broker得知一个consumer宕机时,它会通知其他工作的consumers尽快重新平衡
  • 41 当消费有序消息时,consumers需要在重新平衡时锁定队列重新平衡时负责和解锁.consumer客户端使用此code发送请求brokers锁定指定的队列
  • 42 与code 41相似,用来解锁队列
  • 43 此code主要是管理工具来使用,获取所有的消费的偏移量
  • 45 此code用来获取延迟topic的偏移量
  • 100 客户端使用此code在指定的命名空间下将键值对放到name server
  • 101 客户端使用此code从指定命名空间中的name server检索键值对
  • 102 从指定的命名空间下的name server中删除键值对
  • 105 从name server获取topic路由信息.客户端将使用响应路由信息来确定哪些brokers具有此topic以及如何连接到这些brokers
  • 106 获取群集信息:响应应包含每个工作broker的简要信息
  • 200 管理客户端通常使用此code来创建新的consumer group或更新现有的consumer group以更改属性
  • 201 从broker查询所有已知的consumer group配置。
  • 202 查询topic相关的统计信息
  • 203 查询所有在线的consumers的连接
  • 204 查询所有在线的producers的连接
  • 205 擦除broker的写权限
  • 206 从给定的name server查询所有topic
  • 208 查询由broker记录的所有队列的消耗统计信息
  • 215 从broker中删除topic并删除本topic下的数据。
  • 216 从name server中移除topic的配置
  • 220 告诉consumer通过broker重置当前的偏移量
  • 221 获取consumer客户端记录的当前状态,此代码将很快被弃用
  • 222 要求broker从consumer客户端按给定的时间戳重置偏移量
  • 223 从broker获取当前consumer的状态
  • 224 通过集群名称从broker获取所有topic的列表
  • 300 从broker通过topic查询所有consumer group的列表
  • 303 通过远程的broker查询consumer的时间跨度记录
  • 304 从name server查询系统topic列表
  • 305 从broker查询系统topic列表
  • 306 告诉broker通过管理工具清除过期的consumer队列
  • 307 从broker查询当前客户端的运行信息
  • 308 从broker查询校正偏移量
  • 309 由broker直接从msgid获取消息
  • 315 从broker查询所有统计信息,如总消息计数、Recv消息计数、平均UPS等
  • 316 从broker中清除未使用的topic包含有关此topic的所有信息/消息
  • 317 查询此broker的所有的consumers状态
  • 318 更新name server上保存的属性
  • 319 查询name server当前的属性
  • 320 当RocketMQ producer使用批处理模式发送消息时使用此code
  • 321 查询当前consumer group使用的broker中保存的所有consumer队列
  • 322 查询当前的server版本
响应代码
  • 10 如果brokers经历磁盘刷新超时,则此code将在发送消息时返回。
  • 11 主brokers返回此code以指示所发送的消息没有复制到从brokers,因为它们目前不可用.producers可以根据特定的应用标准将消息发送解释为成功或失败
  • 12 主brokers返回此code以指示发送的消息被复制到从时超时
  • 13 此code当消息不合法时,由producer返回
  • 14 当发送消息时而brokers不在线时,返回此code
  • 15 此code被废弃
  • 16 当没有权限发送或拉取消息时,返回此code
  • 17 当发送或拉取消息而topic在brokers中不存在时,返回此code
  • 19 内部响应代码,当在broker中没找到相应的消息时由pull api返回
  • 20 见19
  • 21 见19
  • 22 如果查询请求接受时但在brokers/name server中未找到目标,返回此代码
  • 23 内部响应代码,当无法解析订阅信息时返回此代码
  • 24 内部响应代码,当brokers不存在订阅信息时返回此代码
  • 25 内部响应代码,如果当前订阅与brokers中的最新版本不匹配时返回此代码
  • 26 当发送或拉取消息而brokers中不存在此consumer group时,返回此code
  • 206 consumer不在线时查询它的状态,返回此code
  • 207 管理工具拉取消息超时时,返回此code
  • 208 当在管理工具中使用查询命令没有找到消息时,将返回此代码

Body

主体部分是可选的二进制数据块,其长度可以由L1-L2-4来计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值