Dubbo是什么
Dubbo是一款高性能的Java RPC框架
三大核心能力:
- 面向接口的远程方法调用
- 智能容错和负载均衡
- 服务自动注册和发现
什么是RPC
远程过程调用 (remote procedure call)
比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用(Consumer )想调用B服务器(Provider )上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用
所以需要通过网络来表达调用和传达
RPC并不是一个具体的技术,而是一个泛化的概念,指所有的远程过程调用手段
Dubbo原理流程
Dubbo架构图(Dubbo官方提供)如下:
节点角色说明:
节点 | 角色名称 |
---|---|
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心( Zookeeper Eureka Nacos等) |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
调用关系说明:
-
服务容器负责启动,加载,运行服务提供者。
-
服务提供者在启动时,向注册中心注册自己提供的服务。
-
服务消费者在启动时,向注册中心订阅自己所需的服务。
-
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
-
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
-
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
Dubbo怎么用?
基本流程:
用spring boot分模块开发服务 , 一个作为服务的提供方,一个作为服务的消费方。
通过ZooKeeper , Nacos等实现服务注册, 通过Dubbo来实现服务消费方远程调用服务提供方的方法
yml配置文件部分内容
provider
<!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
<dubbo:application name="dubbodemo_provider" />
<!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址-->
<dubbo:registry address="zookeeper://ip地址:2181"/>
<!-- 注册 协议和port 端口默认是20880 -->
<dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
<!-- 扫描指定包,加入@Service注解的类会被发布为服务 -->
<dubbo:annotation package="com.itheima.service.impl" />
consumer
<!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
<dubbo:application name="dubbodemo-consumer" />
<!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址-->
<dubbo:registry address="zookeeper://192.168.134.129:2181"/>
<!-- 扫描的方式暴露接口 -->
<dubbo:annotation package="com.itheima.controller" />