Dubbo 学习笔记

Dubbo 学习笔记

Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的、轻量级的开源Java RPC 框架,可以和Spring框架无缝集成,2018年阿里巴巴把这个框架捐献给了apache基金会。

他采用了RPC远程调用协议来进行服务器间的通信,RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的 RPC框架。Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo等。

Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

Dubbo作为一个框架,几个主要组成部件分别为:Provider-服务提供者,Consumer-消费者,Registry-服务注册中心,Monitor-监控中心,Container-服务运行容器。

整个框架运行流程为:

0. 服务容器负责启动,加载,运行服务提供者。

1. 服务提供者在启动时,向注册中心注册自己提供的服务。

2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

0-2步为启动时完成的功能,其余为运行过程中执行的功能。除4为同步访问外,其余都为异步访问。

服务注册中心作为Dubbo的核心服务,Dubbo官 方推荐使用Zookeeper作为服务注册中心。Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 。

 

 

 

流程说明:

服务提供者(Provider)启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址

服务消费者(Consumer)启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址

监控中心(Monitor)启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址

在Linux上部署并启动zookeeper后可以通过Dubbo管理控制台也就是一个web应用来管理他,只需修改控制台配置文件下的Dubbo地址,即可在浏览器中打开管理中心。他提供了许多配置例如负载均衡,权重等。

Provider配置文件例子

-------------------------------------------------------

    <!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
<dubbo:application name="provider_demo" />
    <!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址-->
<dubbo:registry address="zookeeper://192.168.239.128:2181"/>
    <!-- 注册 协议和port -->
<dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
    <!-- 扫描指定包,加入@Service注解的类会被发布为服务 -->
<dubbo:annotation package="com.yyc.service.impl" />

------------------------------------------------------

Service实现类需添加Dubbo的@Service注解。

Consumer配置文件例子

------------------------------------------------------

<!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
<dubbo:application name="dubbodemo-consumer" />
<!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址-->
<dubbo:registry address="zookeeper://192.168.239.128:2181"/>
<!-- 扫描的方式暴露接口 -->
<dubbo:annotation package="com.yyc.controller" />

 ------------------------------------------------------

posted @ 2021-05-18 10:09  Aisebil  阅读(62)  评论(0)    收藏  举报