zoukankan      html  css  js  c++  java
  • 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;
        }

  • 相关阅读:
    7z usecaes
    最新状态
    ABAP 常用FUNCTION (最近工作中用到的)
    又是一个星期五
    阿牛
    自我定位的重要性
    smortform 创建
    换个角度想或许不一样
    为什么喜欢跟男生聊天小小分析
    BDC 代码设置
  • 原文地址:https://www.cnblogs.com/guazi/p/6883679.html
Copyright © 2011-2022 走看看