[Dubbo] 重要接口与类

news2024/11/20 21:34:38

文章目录

      • 1.dubbo的整体调用链路
      • 2.dubbo的源码整体设计
      • 3.重要接口和类

1.dubbo的整体调用链路

在这里插入图片描述

  1. 消费者通过Interface进行方法调用,统一交由消费者的Proxy处理(Proxy通过ProxyFactory来进行代理对象的创建)

  2. Proxy调用Filter模块,做一个统一的过滤请求。(这里的过滤一般是服务容错、调用本地缓存等)

  3. 进入到最主要的invoker调用逻辑:

  4. 通过Directory读取配置信息, 最终通过list方法获取所有的invoker

  5. 通过Cluster模块,根据选择的具体路由规则来选择invoker列表

  6. 通过loadBalance模块,选择负载均衡策略,选择一个具体的invoker来处理请求

  7. 如果执行出错,且Consumer阶段配置了重试机制,则会重新尝试执行

  8. 继续经过filter,进行执行功能的前后封装 invoker 选择具体的执行协议。(注意这里的filter要区别于上面步骤2中的filter,这里做的事情与上面完全不同,这里操作有:context、deprecated、count、limit、monitor等)

  9. 请求进入client,进行codec(编码)、serialization(序列化),然后发送数据给provider

  10. 请求到达Provider中的Server, 这里进行方便吗和反序列化的接收数据

  11. 使用Exporter选择执行器(执行协议)

  12. 交给Filter进行一个提供者端的过滤, 到达invoker

  13. 这里我们可以将6、7、8的执行过程与前面 4、5的执行过程做一个对比,前面4、5的执行过程时通过filter包装对象 – > invoker选择执行协议 —> client编码和序列化数据 ;这里6、7、8的执行过程是 server反序列化接收到的数据 --> Export选择执行协议 —> filter 包装数据。我们可以看到前面4、5的过程是服务消费端加工数据和传输的过程, 后面6、7、8是服务提供端接收数据和翻译数据的过程。

  14. 通过invoker调用接口的具体实现,然后返回

2.dubbo的源码整体设计

在这里插入图片描述

start —> interface — > proxy – >filter —> invoker --> filter —> client ----> codec—>serilization ----> server —> export —> filter —> invoker

  1. service 服务层:该层与实际业务逻辑有关,根据服务消费方和服务提供方的业务设计,实现对应的接口。
  2. config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类
  3. proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory
  4. registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService
  5. cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance
  6. monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService
  7. protocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter
  8. exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
  9. transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec
  10. serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool
  • Protocol 是服务域,它是 Invoker 暴露和引用的主功能入口,它负责 Invoker 的生命周期管理。

  • Invoker 是实体域,它是 Dubbo 的核心模型,其他模型都是向它靠拢,或转换成它,它代表一个可执行体,可向它发起 Invoker 调用,它有可能是一个本地实现,也有可能是一个远程实现,也有可能是一个集群实现。

  • 在 RPC 中,Protocol 是核心层,也就是只要有 Protocol + Invoker + Exporter 就可以完成非透明的 RPC 调用,然后在 Invoker 的主过程上 Filter 拦截点。

  • 当我们使用服务提供者调用服务提供者的时候,会经过一系列的Filter链,Filter链在服务提供者端有,在服务调用者端也是有的。
    在这里插入图片描述

3.重要接口和类

  • Invocation
  • Invoker
  • Exporter
  • Directory
  • Filter
  • Protocol
  • Transporter
  • LoadBalance

在这里插入图片描述

Invocation: 其封装了远程调用的具体信息

在这里插入图片描述

Invoker: 提供者 provider 的代理对象,代码中表示提供者。消费者进行远程调用时,其通过服务路由、负载均衡、集群容错等机制要查找的就是 Invoker。找到了其需要的 Invoker 实例就可以进行远程调用了。

在这里插入图片描述

Exporter: 服务暴露对象,可以获取到服务暴露实例所包含的远程调用实例 Invoker

在这里插入图片描述

Directory: 可以将 Directory 理解为一个 Invoker 列表。

在这里插入图片描述

Filter: 当我们使用服务提供者调用服务提供者的时候,会经过一系列的Filter链,Filter链在服务提供者端有,在服务调用者端也是有的。

在这里插入图片描述

Protocol: 协议

在这里插入图片描述

Transporter: 传送者, Netty的实现

在这里插入图片描述

在这里插入图片描述

LoadBalance: 负载均衡的接口, 实现类有5个, hash算法, 最小回应, 随机轮询, 最少响应…

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

搞懂 API ,API 分类全知道

API,即应用程序编程接口,是为了方便应用程序之间的数据和功能交互而设计的一些标准方法。API 的分类可以从多个维度进行,我会对 API 的分类维度进行简单的介绍。 根据使用方式的不同 通常情况下,API 可以分为两种使用方式&#…

【LeetCode】1143. 最长公共子序列

1.问题 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff0…

Springboot 项目搭建

目录 一、new project 二、pom.xml 三、配置 resources/application.yml 四、CodeGenerator 代码生成 五、在项目主启动类中&#xff0c;添加MapperScan注解 六、编写 Controller 七、选择application类&#xff0c; 点击运行 一、new project: 二、pom.xml <?xml …

如何升级npm 和 安装nvm 及 升级node.js

1.NPM如何升级&#xff1f; 1.1.可以使用NPM自带的命令进行升级&#xff1a; npm install -g npm 注&#xff1a;这个命令会安装最新的&#xff0c;安装到全局。 2.查看NPM版本 npm -v 注&#xff1a;要是版本过低&#xff0c;可使用上面所说命令进行升级。 3.怎么把node.js升…

二级医院不良事件管理源码,事件审核处理、事件提醒、权限控制、外部上报等功能

医疗安全不良事件报告系统源码 技术架构&#xff1a;前后端分离&#xff0c;仓储模式 开发语言&#xff1a;PHP 开发工具&#xff1a;vscode 前端框架&#xff1a;vue2element 后端框架&#xff1a;laravel8 数 据 库&#xff1a;mysql5.7 文末获取联系&#xff01; 医疗…

供应链管理:理解供应链管理

什么是供应链 供应链便是环绕中心企业&#xff0c;从配套零件开始&#xff0c;制成中心产品直至最终产品&#xff0c;最后由出售网络把产品送到顾客手中的、将供应商&#xff0c;制造商&#xff0c;分销商直到最终用户连成一个整体的功用网链结构。 从这个角度讲&#xff0c;生…

实验9---SpringMVC控制器

实验九 SpringMVC 二 一、实验目的及任务 通过该实验&#xff0c;掌握SpringMVC实现供应商添加、查看、修改的方法。掌握SpringMVC控制器的编写方法。 二、实验环境及条件 主机操作系统为Win10&#xff0c;Tomcat,j2sdk1.6或以上版本。 三、实验实施步骤 略 四、实验报…

一个让人类窒息的AI工具,或许未来人工智能真的能代替人类!

时隔几周&#xff0c;「神采PromeAI」又更新了 不仅页面做了小小的调整 又增加了「背景生成」功能 害怕各位小伙伴找不到使用位置 今天小编就给大家分享一个超全的使用教程 极速出图效率翻倍 让神采PromeAI在应用性设计方面更具优势 温馨提示&#xff1a;目前手机适配端无…

接口自动化测试框架设计:数据驱动、Page Object、单例模式实战

B站首推&#xff01;2023最详细自动化测试合集&#xff0c;小白皆可掌握&#xff0c;让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db 目录 一、前言 二、设计模式 2.1 数据驱动测试模式 2.2 Page Object 模式 2.3 单例模式 三、代码实现 四、总…

小米路由器4A,(R4A千兆版)刷openwrt系统(Linux的一种)

下载系统 第一步下载自己路由器型号的系统固件&#xff0c;https://openwrt.org/toh/views/toh_fwdownload 直接在页面搜索自己路由器品牌找到区域再找到自己的型号对应的&#xff0c;然后选第一个链接是稳定版系统固件&#xff0c;下载后改名为openwrt.bin 固件备用 下载程序 …

Facebook禁止推广的产品,你知道吗?

作为全球最大的社交媒体平台之一&#xff0c;Facebook一直在努力保护广告客户和用户的权益&#xff0c;以及确保平台上的广告内容合法、道德、安全。 在本文中&#xff0c;我们将深入了解Facebook禁止推广的产品&#xff0c;以及为什么它们被禁止。ClonBrowser多账号功能可以通…

Java基础(十七)File类与IO流

1. java.io.File类的使用 1.1 概述 File类及本章下的各种流&#xff0c;都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录&#xff08;俗称文件夹&#xff09;&#xff0c;与平台无关。&#xff08;体会万事万物皆对象&#xff09;File 能新…

Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

本篇博客算是一个开头&#xff0c;接下来会持续更新使用Swift3.0开发服务端相关的博客。当然&#xff0c;我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现。Perfect框架是加拿大一个创业团队开发的&#xff0c;目前是Perfect2.0版本&#xff0c;关于Perfect框架&a…

OpenGL光照教程之 透光物

引言 我们目前使用的所有光照都来自于一个单独的光源&#xff0c;这是空间中的一个点。它的效果不错&#xff0c;但是在真实世界&#xff0c;我们有多种类型的光&#xff0c;它们每个表现都不同。一个光源把光投射到物体上&#xff0c;叫做投光。这个教程里我们讨论几种不同的投…

告别被拒,如何提升iOS审核通过率(上篇)

iOS审核一直是每款移动产品上架苹果商店时面对的一座大山&#xff0c;每次提审都像是一次漫长而又悲壮的旅行&#xff0c;经常被苹果拒之门外&#xff0c;无比煎熬。那么问题来了&#xff0c;我们有没有什么办法准确把握苹果审核准则&#xff0c;从而提升审核的通过率呢&#x…

ESP32-C2开发板简介

C2是一个芯片采用4毫米x 4毫米封装&#xff0c;与272 kB内存。它运行框架&#xff0c;例如ESP-Jumpstart和ESP造雨者&#xff0c;同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统&#xff0c;受到了全球用户的信赖。它由支持Espressif以及所有…

PtQt的使用与pycharm的结合

PtQt的使用与pycharm的结合 环境安装 pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple # 如果执行成功&#xff0c;没有任何错误提示&#xff0c;则表明环境搭建成功 from PyQt5 import QtWidgets# 当然也可以查看PyQt版本 from PyQt5.QtCore import * print…

Unity之OpenXR+XR Interaction Toolkit实现 移动和转向

一.前言 我们知道&#xff0c;在VR游戏中&#xff0c;我们除了可以通过传送来移动之外&#xff0c;还可以通过手柄的遥感进行移动&#xff0c;那么接下来&#xff0c;我们就介绍一下如果通过XR Interaction Toolkit来实现遥感控制任务移动和旋转 二.准备工作 我们需要准备好…

C. Maximum Subrectangle(思维 + 考察两个数组相乘得到的矩阵的含义)

Problem - C - Codeforces 给定两个正整数数组 a 和 b&#xff0c;长度分别为 n 和 m。 定义矩阵 c 为一个 nm 的矩阵&#xff0c;其中 ci,jai⋅bj。 你需要在矩阵 c 中找到一个子矩形&#xff0c;使得它的元素之和最多为 x&#xff0c;并且它的面积&#xff08;即元素总数&a…

考pmp有什么好处?

PMP证书报名条件要求高&#xff0c;这是众所周知的事&#xff0c;那你通过了PMP考试&#xff0c;就证明你是有一定能力的&#xff0c;重要的是&#xff0c;你已经有了至少半年的项目管理经验&#xff0c;并且在你申请考试的前六年内&#xff0c;累计项目管理达三年。 PMP有什么…