Dubbo的原理和机制

article/2025/11/7 19:23:22

Dubbo :是一个RPC框架,SOA框架:

Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

作为RPC:支持各种传输协议,如dubbo,hession,json,fastjson,底层采用mina,netty长连接进行传输!典型的provider和cusomer模式!
作为SOA:具有服务治理功能,提供服务的注册和发现!用zookeeper实现注册中心!启动时候服务端会把所有接口注册到注册中心,并且订阅configurators,服务消费端订阅provide,configurators,routers,订阅变更时,zk会推送providers,configuators,routers,启动时注册长连接,进行通讯!proveider和provider启动后,后台启动定时器,发送统计数据到monitor(监控中心)!提供各种容错机制和负载均衡策略!!

Consumer服务消费者,Provider服务提供者。Container服务容器。消费当然是invoke提供者了,invoke这条实线按照图上的说明当然同步的意思了,多说一句,在实际调用过程中,Provider的位置对于Consumer来说是透明的,上一次调用服务的位置(IP地址)和下一次调用服务的位置,是不确定的。这个地方就是实现了软负载。

服务提供者先启动start,然后注册register服务。

消费订阅subscribe服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服务通过notify到消费者。

Monitor这是一个监控,图中虚线表明Consumer 和Provider通过异步的方式发送消息至Monitor,Consumer和Provider会将信息存放在本地磁盘,平均1min会发送一次信息。Monitor在整个架构中是可选的(图中的虚线并不是可选的意思),Monitor功能需要单独配置,不配置或者配置以后,Monitor挂掉并不会影响服务的调用。

netty 是什么?

“netty 是一个基于nio的客户、服务器端编程框架,netty提供异步的,事件驱动的网络应用程序框架和工具,可以快速开发高可用的客户端和服务器。

netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。

二、dubbo原理?

I、初始化过程细节: 
上图中的第一步start,就是将服务装载容器中,然后准备注册服务。和Spring中启动过程类似,spring启动时,将bean装载进容器中的时候,首先要解析bean。所以dubbo也是先读配置文件解析服务。 
解析服务: 
1)、基于dubbo.jar内的Meta-inf/spring.handlers配置,spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler类。 
2)、所有的dubbo标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。 
在ServiceConfig.export 或者ReferenceConfig.get 初始化时,将Bean对象转会为url格式,将所以Bean属性转成url的参数。 
然后将URL传给Protocol扩展点,基于扩展点的Adaptive机制,根据URL的协议头,进行不同协议的服务暴露和引用。

a、 只暴露服务端口

在没有使用注册中心的情况,这种情况一般适用在开发环境下,服务的调用这和提供在同一个IP上,只需要打开服务的端口即可。 
即,当配置 or 
ServiceConfig解析出的URL的格式为: 
Dubbo://service-host/com.xxx.TxxService?version=1.0.0 
基于扩展点的Adaptiver机制,通过URL的“dubbo://”协议头识别,直接调用DubboProtocol的export()方法,打开服务端口。

b、向注册中心暴露服务:

和上一种的区别:需要将服务的IP和端口一同暴露给注册中心。 
ServiceConfig解析出的url格式为: 
registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(“dubbo://service-host/com.xxx.TxxService?version=1.0.0”)

基于扩展点的Adaptive机制,通过URL的“registry://”协议头识别,调用RegistryProtocol的export方法,将export参数中的提供者URL先注册到注册中心,再重新传给Protocol扩展点进行暴露: Dubbo://service-host/com.xxx.TxxService?version=1.0.0

四、服务暴露和消费的详细过程

(1)服务提供者暴露一个服务的详细过程

服务提供者暴露服务的主过程:

首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,

到这一步就完成具体服务到Invoker的转化。接下来就是Invoker转换到Exporter的过程。

Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程(如上图中的红色部分),下面我们以Dubbo和RMI这两种典型协议的实现来进行说明:

Dubbo的实现:

Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由Dubbo自己实现。

RMI的实现:

RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法,
它通过Spring或Dubbo或JDK来实现RMI服务,通讯细节这一块由JDK底层来实现,这就省了不少工作量。

(2)服务消费者消费一个服务的详细过程

服务消费的主过程:

首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例(如上图中的红色部分),这是服务消费的关键。

接下来把Invoker转换为客户端需要的接口(如:HelloWorld)。

 

 

 


http://chatgpt.dhexx.cn/article/o7Nd30Wu.shtml

相关文章

dubbo实现原理介绍

一、什么是dubbo Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看, Dubbo采用的是一种非常简单的模型…

Dubbo-聊聊Dubbo协议

前言 Dubbo源码阅读分享系列文章,欢迎大家关注点赞 SPI实现部分 Dubbo-SPI机制 Dubbo-Adaptive实现原理 Dubbo-Activate实现原理 Dubbo SPI-Wrapper 注册中心 Dubbo-聊聊注册中心的设计 Dubbo-时间轮设计 通信 Dubbo-聊聊通信模块设计 什么是协议 在网…

dubbo客户端的实现

业界微服务大行其道。服务与服务之间的同学主要有有以下两大类。 阿里RPC框架:dubboRestFull风格的Http调用 我们知道Http接口我们找到PostMan这种Http客户端。 但是dubbo似乎并没有想关的客户端,我们调试的时常常需要同时打开两个以上的服务。 dubbo是…

dubbo组成原理-http服务消费端如何调用

dubbo协议已经用的很多了,这里来稍微介绍一下http协议,官方对http协议的说明简直少的让人发指。哈哈 百度大部分都只是讲了http服务端的配置 那就先从服务端的配置说起 dubbo需要的jar包这里就不说明了,网上找些maven的pom就可以 web.xml…

Dubbo基本原理机制

分布式服务框架: –高性能和透明化的RPC远程服务调用方案–SOA服务治理方案 -Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接 Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费…

Dubbo基本原理与机制

1、什么是Dubbo Dubbo 是一款高性能、轻量级的开源 RPC 框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。 2、Dubbo依赖关系 1、服务消费者(Consumer): 调用远程服务的服务消费方&#xff0c…

dubbo原理和机制

Dubbo 框架是用来处理分布式系统中,服务发现与注册以及调用问题的,并且管理调用过程。 一,工作流程: 服务提供者在启动的时候,会通过读取一些配置将服务实例化。Proxy 封装服务调用接口,方便调用者调用。…

Dubbo的原理与机制

​ Dubbo 前言 在介绍Dubbo之前先了解一下基本概念: Dubbo是一个RPC框架,RPC,即Remote Procedure Call(远程过程调用),相对的就是本地过程调用,在分布式架构之前的单体应用架构和垂直应用架…

Dubbo基础及原理机制

1. 什么是Dubbo? Dubbo是 阿里巴巴公司开源的一个高性能RPC 分布式服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成,现已成为 Apache 基金会孵化项目。 2. 为什么要用Dubbo&#xff1…

Dubbo原理和机制详解(非常全面)

Dubbo是一款Java RPC框架,致力于提供高性能的RPC远程服务调用方案。Dubbo 作为主流的微服务框架之一,为开发人员带来了非常多的便利。 本文我们重点详解 Dubbo 的原理机制 mikechen 目录 Dubbo核心功能Dubbo核心组件Dubbo的架构设计Dubbo调用流程 1️…

大地测量学基础(复习)第一部分

写在前面 这篇博文是用来复习课程“大地测量学基础”的,里面仅列出本人觉得这门课程比较重要的部分,希望能够帮助到有需要的朋友。 课本采用《大地测量学基础》孔祥元,武汉大学出版社。 前面已经有一篇“大地测量学基础(复习&…

深入理解ArcGIS的地理坐标系、大地坐标系

1、引言 地理坐标:为球面坐标。 参考平面地是 椭球面,坐标单位:经纬度 大地坐标:为平面坐标。参考平面地是 水平面,坐标单位:米、千米等 地理坐标转换到大地坐标的过程可理解为投影。 (投影:将不规则的地球曲面转…

GNSS定位中的不同高度概念及计算

文章目录 高度相关的几个基本概念RTKLIB中高度设置与计算参考文献 由于在GNSS定位中由多种高度表示,不同的高度概念很容易混淆,中英文对应有时候也容易搞混。因此整理了一下常用的两种高度——椭球高、正高的概念与计算,并且标注了对应的英文…

概念讲解:大地水准面 | 地球椭球体 | 参考椭球体 | 大地基准面 | 地图投影

文章目录 大地水准面地球椭球体参考椭球体大地基准面地图投影几个概念之间的关系相关文章 大地水准面 指平均海平面通过大陆延伸勾画出的一个连续的封闭曲面。大地水准面包围的球体称为大地球体。从大地水准面起算的陆地高度,称为绝对高度或海拔。 大地水准面是对地…

地图学的基础知识_天文坐标系_大地坐标系_地心坐标系及其相关概念

学习地图学,由于地理知识欠缺,学习相关投影知识还为时过早,需要复习一些基本概念。 阅读对象:测绘类 地球自然球体: 由地球自然表面所包围的的形体称为地球自然体。 地球自然球体形状:地球不是一个正球体,而是一个极半径略短&a…

大地测量学

大地测量学简答题复习 问:建立国家平面控制网的方法? 答: 常规大地测量:三角测量(已知一个点的坐标,又精密测量了1,2点的边长和坐标方位角,依据三角形的正弦定理推测出其他边的长…

[复试——大地测量学]第一章节——2022/12/30

PART 1 大地测量学的定义 是在一定的时间和空间的参考系中,测量和描绘地球形状及其重力场并监测其变化,为人类活动提供地球空间信息的一门学科。 大地测量学的作用 1.建立地面控制网 2.精确测定大地控制点的三维位置以及其重力场参数 大地测量学的…

1985高程基准与全球大地水准面(EGM2008)的关系综述

​按照惯例,先给结论: (1)1985国家高程基准与EGM2008的差异有严密的理论公式计算; (2)1985国家高程基准与EGM20008的垂直偏差与参考系、水准模型、选取的水准点有关系 (3&#xf…

似大地水准面精化

转载自:http://blog.sina.com.cn/s/blog_64886846010153qi.html 大地高是指以参考椭球面作为高程基准面的高程系统,是地面点沿法线到参考椭球面的距离。 正高是地面点沿重力线到大地水准面的距离。正常高是指从一地面点沿过此点的**正常重力线**到似…

正常高、大地高、海拔高的测绘概念

一、海拔高、大地高 高程是地理学和测量学中对地物高度的一种表达。英文的表达是elevation。与高程相关的两个概念——大地高与海拔高,在实践上有差异,但很容易混淆。 王慧麟等编著的《测量与地图学》(南大出版社,2004年)中对这两个概念有明确表述: 点位沿椭球面的法线至…