【想进大厂还不会阅读源码】ShenYu源码-支持motan协议

简介: ShenYu源码阅读📚。原来的插件只支持 motan2 协议,并且是硬编码的,本次修改使MotanRpcExt 得到增强。我们可以通过以上的线索来思考我们本次的阅读线索,贡献者是做了什么实现了增强motan插件、这个motan的插件的功能是什么。

相信大家碰到源码时经常无从下手🙃,不知道从哪开始阅读,面对大量代码晕头转向,索性就读不下去了,又浪费了一次提升自己的机会😭。


我认为有一种方法,可以解决大家的困扰!那就是通过阅读某一次开源的【PR】、【ISSUE】,从这个入口出发去阅读源码!!


至此,我们发现自己开始从大量堆砌的源码中脱离开来😀。豁然开朗,柳暗花明又一村。

ShenYu是一个异步的,高性能的,跨语言的,响应式的 API 网关。有关ShenYu的介绍可以戳这

一、前瞻

OK,开始我们今天的PR阅读,PR提交如下图。

在这里插入图片描述

翻译过来,意思就是:原来的插件只支持motan2协议,并且是硬编码的。本次修改使MotanRpcExt 得到增强以支持motan协议。同时支持根据客户端注册的RPC协议自动匹配。

简单来说就是增强motan插件

我们可以通过以上的线索来思考我们本次的阅读线索:

  1. 贡献者是做了什么实现了增强motan插件
  2. 这个motan的插件的功能是什么

二、探索

对于线索2,我们可以看下ShenYu项目的模块。

在这里插入图片描述

ShenYu既然是一个网关,它必须要调用到微服务节点,而上图中有各个微服务开源中间件的集成:grpc、dubbo等。可以知道motan插件的功能,就是提供给ShenYu网关一个支持调用motan微服务节点的功能。

那我们继续线索1的探索。

整体看下本次的所有提交,可以分为两部分,负责监听微服务节点消息的监听端、调用微服务节点的调用端

在这里插入图片描述

那我们先看看调用端修改了什么?

// 旧代码
try {
   
    responseFuture = (ResponseFuture) commonClient.asyncCall(metaData.getMethodName(), params, Object.class);
} catch (Throwable e) {
   
    LOG.error("Exception caught in MotanProxyService#genericInvoker.", e);
    return null;
}

// 新代码
try {
   
    Request request = MotanClientUtil.buildRequest(reference.getServiceInterface(), metaData.getMethodName(), metaData.getParameterTypes(), params, null);
    responseFuture = (ResponseFuture)commonClient.asyncCall(request, Object.class);
} catch (Throwable e) {
   
    LOG.error("Exception caught in MotanProxyService#genericInvoker.", e);
    return null;
}

很明显,新代码新增了几个入参reference.getServiceInterface()metaData.getParameterTypes(),推测是为了支持motan协议的作用,这一部分我们发现收获的东西不多,那先看看监听端。

监听端做了以下修改。和调用端同样,新增了入参

在这里插入图片描述
我们很好奇,支持一个新的协议这么简单吗,只是新增了几个入参?

其实可以思考下,本次PR提交贡献的新motan协议和旧的motan2协议,两者本质上都是motan协议。而前者相比旧协议motan2,需要在旧协议的基础上新增以上的入参以支持其功能。

这也解答了上文我们思考的线索1:

贡献者是做了什么实现了增强motan插件

好了,今天的分享就到这了。大家能否感受到通过PR这种方式来阅读源码的乐趣呢

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

相关文章
|
6月前
|
XML 监控 Dubbo
从初学者到专家:Dubbo中Application的终极指南【十一】
从初学者到专家:Dubbo中Application的终极指南【十一】
105 0
|
6月前
|
Dubbo Cloud Native 网络协议
【Dubbo3技术专题】「服务架构体系」第一章之Dubbo3新特性要点之RPC协议分析介绍
【Dubbo3技术专题】「服务架构体系」第一章之Dubbo3新特性要点之RPC协议分析介绍
92 1
|
6月前
|
Java 应用服务中间件 API
干翻RPC系列之HesssionRPC:HesssionRPC的开发体验和源码分析
干翻RPC系列之HesssionRPC:HesssionRPC的开发体验和源码分析
|
6月前
|
XML Dubbo Java
【Dubbo3技术专题】回顾Dubbo2.x的技术原理和功能实现及源码分析(温故而知新)(二)
【Dubbo3技术专题】回顾Dubbo2.x的技术原理和功能实现及源码分析(温故而知新)
80 2
|
6月前
|
XML 监控 Dubbo
【Dubbo3技术专题】回顾Dubbo2.x的技术原理和功能实现及源码分析(温故而知新)(一)
【Dubbo3技术专题】回顾Dubbo2.x的技术原理和功能实现及源码分析(温故而知新)
109 1
|
6月前
|
API Nacos
【想进大厂还不会阅读源码】ShenYu源码-接入注册中心发现服务
ShenYu源码阅读。相信大家碰到源码时经常无从下手🙃,不知道从哪开始阅读😭。我们先思考下我们的阅读线索,贡献者是怎么添加发现服务的。这些发现服务是怎么和项目集成的,让ShenYu网关能从注册中心获取节点信息?
111 1
【想进大厂还不会阅读源码】ShenYu源码-接入注册中心发现服务
|
6月前
|
API Nacos
【想进大厂还不会阅读源码】ShenYu源码-重构同步数据服务
ShenYu源码阅读📚。我们看下PR的标题和Concersation的头一句,大概意思就是重构注册中心数据同步到ShenYu网关的方式。大家看看重构了有没好处呢?不仅获得了知识,还获得了一次开源贡献,何乐而不为呢
|
XML Java 数据格式
最近很火的SOFARPC是什么?带你快速入门SOFARPC
最近很火的SOFARPC是什么?带你快速入门SOFARPC
最近很火的SOFARPC是什么?带你快速入门SOFARPC
|
6月前
|
存储 Dubbo Java
从源码全面解析 dubbo 服务订阅的来龙去脉
从源码全面解析 dubbo 服务订阅的来龙去脉
|
运维 监控 Dubbo
Dubbo3 源码解读-宋小生-16:模块发布器发布服务全过程
> 完整电子书下载地址: https://developer.aliyun.com/ebook/7894 > Dubbo3 已经全面取代 HSF2 成为阿里的下一代服务框架,2022 双十一基于 Dubbo3 首次实现了关键业务不停推、不降级的全面用户体验提升,从技术上,大幅提高研发与运维效率的同时地址推送等关键资源利用率提升超 40%,基于三位一体的开源中间件体系打造了阿里在云上的单元化最佳实
309 0
Dubbo3 源码解读-宋小生-16:模块发布器发布服务全过程
下一篇
无影云桌面