dubbo源码实践-总结

news2024/7/6 18:47:37

自己大概花了一个月的时间,断断续续的看了一遍dubbo源码,之前的文章从实践出发搭建了dubbo各层的例子!

Dubbo源码的学习也暂时告一段落。这篇就谈谈自己对dubbo源码学习个人感受!

1 dubbo是什么?

dubbo是一个RPC框架,用来实现程序间通信的。

可以看看官方的入门文档:https://cn.dubbo.apache.org/zh/docsv2.7/user/preface/

2 dubbo架构图

架构图原地址:https://cn.dubbo.apache.org/zh/docsv2.7/dev/design/

图中的每个类都要知道干什么的,解决什么问题的。

3 学到了什么?

3.1 dubbo基本设计原则

采用 Microkernel + Plugin 模式,Microkernel 只负责组装 Plugin,Dubbo 自身的功能也是通过扩展点实现的,也就是 Dubbo 的所有功能点都可被用户自定义扩展所替换。

采用 URL 作为配置信息的统一格式,所有扩展点都通过传递 URL 携带配置信息。

“Microkernel + Plugin” 模式把流程和具体的实现细节分开,dubbo的整体流程相对固定,实现细节确是多样的。如:底层的通信框架可以用netty也可以用mina。这里其实就是指SPI。

“URL 作为配置信息的统一格式”这个比较奇怪,URL设置参数时就像一个MAP,之前的观念对MAP作为方法的入参比较排斥,一直认为MAP类型不应做入参。看了观念要改改了。

3.2 dubbo架构分层

在dubbo架构图中可以看出,dubbo把自己内部分了好多层,每个层都抽象了一些功能。之前做业务比较喜欢分模块,以后也要想到分层(以前不想的原因可能是Spring的应用,默认就3、4层)。

之前看dubbo源码,直接看服务的发布流程和调用流程比较懵,但是当按层搭建了实例并且分析了每层完成的任务后,再看服务的发布流程和调用流程就比较轻松了。

想了解流程可以参考官方说明文档:

服务导出: https://cn.dubbo.apache.org/zh/docsv2.7/dev/source/export-service/

服务引用: https://cn.dubbo.apache.org/zh/docsv2.7/dev/source/refer-service/

3.3 Invoker接口抽象

Invoker接口抽象的比较惊艳,消费端用Invoker封装了远程调用、集群调用(路由、负载均衡),服务提供端用Invoker封装了业务服务的调用,同时还提供了Invoker的异步转同步实现类(参见AsyncToSyncInvoker类)。

Invoker还支持互相嵌套。

Filter接口也有可以看看,也实现了对Invoker的包装,类似web应用中的Filter。

3.4 jdk动态代理、反射和javassist的学习

dubbo在消费端使用了jdk动态代理或者javassist来生成接口的实现类,服务提供端使用反射或者javassist来完成对相应业务服务类的调用。可以参考JdkProxyFactory、JavassistProxyFactory。

3.5 CompletableFuture类

dubbo的异步使用了 jdk1.8 提供的CompletableFuture类,需要了解和使用一下。

3.6 dubbo中的时间轮和线程池实现

dubbo中的时间轮和线程池实现,有空需要了解一下。

4 和面试官怎么聊?

1)Microkernel + Plugin 模式(SPI) + URL参数。

2)架构分层,每一层的功能。架构图要牢记。

3)dubbo的各个功能需要看一看:

A. 推荐用法 https://cn.dubbo.apache.org/zh/docsv2.7/user/recommend/

B. 参考手册 https://cn.dubbo.apache.org/zh/docsv2.7/user/references/

4)在结合项目聊聊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网站优化包括对什么优化(网站优化有哪些方面)

互联网时代下,各行各业都想在在互联网中占据市场,目前网站优化成为时代的潮流,很多站长,在对网站进行优化时,稍不注意就会造成网站优化过度,这也是各位最头疼的事情,网站优化能急于求成&#xf…

KubePi <1.6.4 存在会话固定漏洞(CVE-2023-22479)

漏洞描述 KubePi 是一个 K8s 面板,允许管理员导入多个 Kubernetes 集群,并且通过权限控制将不同 cluster、namespace 的权限分配给指定用户。 1.6.4 之前版本的 KubePi 在用户登录后未刷新用户 cookie,攻击者可通过诱导用户点击恶意链接等劫…

maven创建web工程,使用模板方式(二)

一,选择webapp模板 二,填写完信息后,创建后是如下的结构: 可以看到只有web目录,没有其他的java,resources,test目录等。 三,创建Java,resources,test目录 右键-> ma…

【C语言进阶】 指针强化练习

目录题目一题目二题目三题目四题目五题目六题目七题目八题目一 下面这段代码的执行结果是? int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d\n", *(a 1), *(ptr - 1));return 0; }解决这种数组与指针相结合的问题…

【Leetcode面试常见题目题解】2. 无重复字符的最长子串

题目描述 本文是LC第3题:无重复字符的最长子串。 题目描述如下 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 举例 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 输入:…

html实现酷炫的公司年会抽奖(附源码)

文章目录1.设计来源1.1 主界面1.2 抽奖效果1.2 中奖效果2.效果和源码配置2.1 动态效果2.2 员工信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码源码下载作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/128640998 ht…

AI绘画日漫欧漫动态表情换脸游戏风生成红包封面流量主小程序开发

AI绘画日漫欧漫动态表情换脸游戏风生成红包封面流量主小程序开发 因全网AI绘画大量小程序被封禁下架。只有采用合规稳定运营引擎。 文生图图动日漫图生欧漫图转动图人物表情变脸换脸3D动漫集成7大AI制图模式 支持个人模式和企业支付。趣味AI制图支持流量主。 打造一款适合个人…

uniapp 画中画悬浮窗(视频) Ba-VideoPip

简介(下载地址) Ba-VideoPip 是一款画中画方式的视频悬浮窗插件。支持点播、直播;支持官方、三方播放器无缝切换;支持动态刷新(如切换视频或进度)。 支持点播、直播支持官方、三方播放器无缝切换支持动态…

【unity3D】Collider碰撞器组件

💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的Collider碰撞器组件 Collider碰撞器组件▶碰撞器类别▶Box Collider▶Sphere Collider▶Box Collider 2D▶Composite Collider 2…

Aspose.Words for .NET Crack 23.1.0

Aspose.Words for .NET Crack Aspose.Words 及其产品系列是一组 Word 文档,它们处理 API 以创建、编辑、打印、阅读和稍后转换所有格式化的 Word 文档和文件格式,就在 .NET、Java、Android 中、Cloud、SSRS、SharePoint 以及最后但并非最不重要的 Jasper…

【fpdlink显示】DS90UB948关于941连接948 GPIO调试问题

1. 前言 使用一个941连接2 948显示: 941的GPIO0/1/2/3到前948的GPIO0/1/2/3和941的D_GPIO0/1/2/3到948的GPIO0/1/2/3。 设置gpio3输出,则941的D_GPIO3设置高,而948的gpio3设置不高; 但设置gpio3输入后,看到941的D_GPIO3跟随948的gpio3变化。 2. 原理图连接 3. 测试代码…

通过图像了解 Git

我受到Nico Riedmann 的 Learn git concepts, not commands 的启发,我用我自己的方式总结了 git。当然,我也通过阅读官方文档来补充它。从系统结构上理解git,让git更有趣。我最近对 git 上瘾了,以至于我正在创建自己的 git 系统。…

Java集合常见面试题(一)

集合概述 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接…

HarmonyOS智能座舱体验是怎样炼成的?立即查看

目录 一、智能座舱的人因设计理念 1.驾驶场景“2s内安全交互” 2.屏幕信息科学布局 3.屏幕1:2比例特色分屏 二、如何对座舱应用高效设计开发 1.基础要求 2.开发禁止 3.更佳体验 1.音频类应用快速接入 2.手机服务卡片快速适配 三、软硬件联合打造优秀体验 1.小憩模式 2.K歌体验 …

RepVGG:让VGG风格的ConvNets再次伟大

论文地址:https://arxiv.org/abs/2101.03697 我们提出了一种简单但功能强大的卷积神经网络结构,该模型在推理时类似于VGG,只有33的卷积和ReLU堆叠而成,而训练时间模型具有多分支拓扑结构。训练时间和推理时间结构的这种解耦是通过…

李宏毅ML-局部最小值与鞍点

局部最小值与鞍点 文章目录局部最小值与鞍点1. Optimization 没有做好是因为什么?2. Local Minima or Saddle Point?3. 如何解决 Saddle Point?1. Optimization 没有做好是因为什么? 观察下图,随着 update 的次数增加&#xff0…

MFC或C/C++中如何判断目录存在,文件/文件夹存在,亦或是文件夹存在,文件存在

判断的方式太多太多,这里暂时列举5中方式。 在文章开始之前,由于需要用到CString转char功能,所以先介绍一个CString转char的方法: 想知道更多参见CString与char *互转总结 由于本文使用的Unicode编码模式,所以如下&…

链动2+1商业模式的玩法是怎么样的?

如果你感觉自己的产品卖不掉,很可能是因为缺乏一种成功业务模型,因此我们来聊聊运营商业运营模式理论:从一个销售产品到一个商业运营模式的高速发展,我们不能把它简单的当做是一种营销方法,也就是一种产品的营销方法。…

六、MySQL 数据库练习题1(包含前5章练习题目及答案)

文章目录一、数据库概述练习题二、MySQL 环境搭建练习题三、查询练习MySQL 数据库练习题(包含前5章所有知识点及答案) 前置知识: 一、数据库开发与实战专栏导学及数据库基础概念入门 二、MySQL 介绍及 MySQL 安装与配置 三、MySQL 数据库的基本操作 四、MySQL 存储…

PrimalSQL 2023 Crack

PrimalSQL 2023 使数据库查询开发和测试变得轻而易举,无论您的数据库类型或供应商如何。 通过单个工具支持多个数据库提供程序。 Access、SQL Server、SQL Server Compact、MySQL、Oracle、ODBC、OLEDB、Sybase 等。 使用Visual Query Builder构建复杂的查询。 使…