《RocketMq》一、网络传输篇

本文深入探讨RocketMQ的网络传输原理,重点解析RocketMQ-remoting的编码解码过程、通信层与业务层处理,以及如何实现高效网络传输。通过学习,可以了解如何构建分布式系统的网络传输解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你是否想知道一个分布式系统的网络传输解决方案,那你可以学习下RocketMQ的网络传输原理,从RocketMQ的Remoting网络处理部分,可以学习到如何进行高效的网络传输,这些思想可以应用到不同的业务中。

 

一、要解决的问题

         其实大部分应用的网络处理都要解决如下图所示的问题:



那么就以RocketMQ的源码入手,看看它是如何架构如上的结构的。

 

二、RocketMQ-remoting详解

2.1首先给出其整体的结构图


2.2 编码解码

在RocketMQ中,所有的通讯都是使用RemotingCommand这个结构,这个结构的内容如下:

private static final int RPC_TYPE = 0; // 0, REQUEST_COMMAND
// 1, RESPONSE_COMMAND

private static final int RPC_ONEWAY = 1; // 0, RPC
// 1, Oneway

/**
 * Header 部分
 */
private int code; // 用于标示请求类型,参见RequestCode,ResponseCode
private LanguageCode language = LanguageCode.JAVA;
private int version = 0;
private int opaque = RequestId.getAndIncrement(); // 每个消息的唯一标志,request和response通过该字段匹配
private int flag = 0;
private String remark;
private HashMap<String, String> extFields; // 传输时使用,CommandCustomHeader转为该结构<key,value>后,再统一转为json传输。因此
CommandCustomHeader只能是String,Int,Long等基础数据结构,不能是复合数据结构
private transient CommandCustomHeader customHeader; // 业务逻辑中使用该结构,传输时,使用 extFields
/** * Body 部分 */private transient byte[] body;


2.2.1 RemotingCommand转为网络传输数据

在MQ中,所有数据传输都使用该数据结构进行数据传输,当把数据转为网络传输时,会将customHeader转为HashMap的extFields,再转为json串

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值