rocketMQ 使用 netty 通信,端对端的通信,为了避免粘包、分包,需要指定发送数据的边界。

使用的解码器是 LengthFieldBasedFrameDecoder

// org.apache.rocketmq.remoting.protocol.RemotingCommand#encode
public ByteBuffer encode() {
// 1> header length size
int length = 4; // 2> header data length
byte[] headerData = this.headerEncode();
length += headerData.length; // 3> body data length
if (this.body != null) {
length += body.length;
} ByteBuffer result = ByteBuffer.allocate(4 + length); // length
result.putInt(length); // header length
result.put(markProtocolType(headerData.length, serializeTypeCurrentRPC)); // header data
result.put(headerData); // body data;
if (this.body != null) {
result.put(this.body);
} result.flip(); return result;
}

从中可以看出数据的格式:4, 4, headerData, bodyData

4 字节存储数据的总长度

4 字节存储头的长度和元数据

headerData 存储头数据

bodyData 存储内容

RocketMQ 使用的解码器:

public class NettyDecoder extends LengthFieldBasedFrameDecoder {
private static final InternalLogger log = InternalLoggerFactory.getLogger(RemotingHelper.ROCKETMQ_REMOTING); private static final int FRAME_MAX_LENGTH =
Integer.parseInt(System.getProperty("com.rocketmq.remoting.frameMaxLength", "16777216")); public NettyDecoder() {
super(FRAME_MAX_LENGTH, 0, 4, 0, 4);
}
}

最新文章

  1. java基本数据类型
  2. MongoDB replica set IDs do not match
  3. Sql Server系列:Transact-SQL变量
  4. CSS3打造3D效果——perspective transform的深度剖析
  5. Vector Calculus
  6. NRF51822之GPIOTE介绍
  7. [Android实例] Scroll原理-附ScrollView源码分析
  8. Oracle 中 根据值 查询 所在 表和字段
  9. 手写PE文件(二)
  10. codeigniter框架扩展核心类---实现前台后台视图的分离
  11. c#语音
  12. java基础之数组常用操作
  13. git一键部署代码到远程服务器(linux)(采坑总结)
  14. Diverse Garland CodeForces - 1108D (贪心+暴力枚举)
  15. Tools - UML
  16. GraphQL入门3(Mutation)
  17. docker端口映射,批量删除容器
  18. TZOJ 数据结构期末历年题目
  19. HDU 1301Jungle Roads(最小生成树 prim,输入比较特殊)
  20. python基础之内置异常对象

热门文章

  1. 苹果预热 WWDC 2019
  2. 023-zabbix性能优化中的几个中肯建议
  3. 数据结构之查找(图片来源,老师PPT)
  4. mysql查看库、表占用存储空间大小
  5. zencart后台订单详细页显示产品图片和链接
  6. Codeforces 967 贪心服务器分配资源 线性基XOR递增序列构造
  7. linux 文件查找 find命令详解
  8. Python之面向对象之初识面向对象
  9. webpack 搭建React(手动搭建)
  10. 深入理解vue 修饰符sync