RocketMQ通信协议

Posted 瓜子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RocketMQ通信协议相关的知识,希望对你有一定的参考价值。

我们先从client端看一个消息是如何发送到服务端,服务端又是如何解析消息的。

client端:

构造请求体:

构造请求体:

发送消息体:

 

下面看服务端:

rocketmq的协议服务端解析救灾这里了RemotingCommand.decode(byteBuffer),我们来看下这个方法,具体是如何解析协议的:

    public static RemotingCommand decode(final ByteBuffer byteBuffer) {
        int length = byteBuffer.limit();    //获取字节缓冲区的整个长度,这个长度等于通信协议格式的2、3、4段的总长度
        int oriHeaderLen = byteBuffer.getInt(); //从缓冲区中读取4个字节的int类型的数据值 ,这个值就是报文头部的长度
        int headerLength = getHeaderLength(oriHeaderLen);

        byte[] headerData = new byte[headerLength];
        byteBuffer.get(headerData); //接下来从缓冲区中读取headerLength个字节的数据,这个数据就是报文头部的数据

        RemotingCommand cmd = headerDecode(headerData, getProtocolType(oriHeaderLen));

        int bodyLength = length - 4 - headerLength;
        byte[] bodyData = null;
        if (bodyLength > 0) {
            bodyData = new byte[bodyLength];
            byteBuffer.get(bodyData);    //接下来读取length-4-headerLength  个字节的数据,这个数据就是报文体的数据
        }
        cmd.body = bodyData;

        return cmd;
    }

 

 

 

 

 

以上是关于RocketMQ通信协议的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统 Centos7 环境基于Docker部署Rocketmq服务

RocketMQ Remoting模块源码功能分析

RocketMQ Remoting模块源码功能分析

4RocketMQ 源码解析之 网络通信 Netty

4RocketMQ 源码解析之 网络通信 Netty

RocketMQ原理解析-Remoting