首页 > 技术文章 > Dubbo笔记

godzzz 2021-10-23 11:14 原文

一、什么是Dubbo?

Dubbo是阿里巴巴公司开源的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,可以和Spring框架无缝集成。

 

术语介绍

RPC (Remote Procedure Call): 远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

SOA (Service-Oriented Architecture): 面向服务架构,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。

 

二、Dubbo的实现原理?

注册中心(registry):生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。

消费者(consumer):客户端,从注册中心获取到方法,可以调用生产者中的方法。

生产者(provider):服务端,生产内容,生产前需要依赖容器(先启动容器)。

容器(container):生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),

          dubbo技术不能脱离spring框架。2.5.3版本的dubbo默认依赖spring2.5版本,可以选用spring4.5以下的版本

          2.5.7版本的dubbo默认依赖spring4.3.10版本,可以选择任意的spring版本。

监控中心(monitor):是dubbo提供的一个jar工程。主要功能是监控服务端和消费端的使用数据。

          如:服务端是什么,有多少接口,多少方法,调用次数,压力信息等,客户端有多少,调用过哪些服务端,调用了多少次等。

 Tips: Dubbo中称这个暴露服务的动作为 export

 

三、Dubbo的执行流程?

0).start:启动Spring容器时,自动启动dubbo的Provider

1).register:dubbo的Provider在启动后自动会去注册内容。注册的内容包括:

      1.1 Provider的IP

      1.2 Provider的端口

      1.3 Provider对外提供的接口、方法

      1.4 dubbo版本号

      1.5 访问Provider的协议

2).subscribe:订阅,当Consumer启动时,自动去Registry获取到所有已注册的服务信息

3).notify: 通知, 当Provider的信息发生变化时,自动由Registry向Consumer推送通知

4).invoke: 调用, Consumer 因为已经从注册中心获取提供者的地址,因此可以通过负载均衡选择一个 Provider 直接调用 。

      4.1).同步请求,消耗一定性能,但是必须是同步请求,因为需要接收调用方法后的结果

5).count: 次数, 每隔1分钟,Provider和Consumer自动向Monitor发送访问次数,Monitor进行统计。

 

四、常用注解

1)@Service

  dubbo提供的注解:org.apache.dubbo.config.annotation.Service,

  如果要把一个Spring Bean暴露成远程服务,实现类只需要加上此注解,

  然后在配置文件中指定包扫描路径,Dubbo启动的时候就会扫描加有该注解的类。

  

2)@Reference 

  dubbo提供的注解:org.apache.dubbo.config.annotation.Reference,

  用于对指定的接口生成代理对象,通过代理远程调用相关方法,实现远程调用。

注意:dubbo服务提供端与消费端之间传递的对象,必须要实现序列化接口

五、注意事项

  首先注册中心和监控中心是可选的,你可以不要监控,也不要注册中心,直接在配置文件里面写然后提供方和消费方直连。

然后注册中心、提供方和消费方之间都是长连接,和监控方不是长连接,并且消费方是直接调用提供方,不经过注册中心

就算注册中心和监控中心宕机了也不会影响到已经正常运行的提供者和消费者,因为消费者有本地缓存提供者的信息

 

推荐阅读