文章目录
- Dubbo框架
 - Dubbo(RPC)概括
 - Dubbo支持的协议
 - Dubbo支持的注册中心
 - dubbo的调用结构
 
- 配置服务项目
 - - 依赖
 - - application-local.yml
 - 配置类+注解
 - - provider(服务提供者): 远程调用的被调用的服务实例
 - - consumer(服务消费者): 远程调用的调用发起的服务实例
 
- 远程调用原理
 
- Dubbo负载均衡
 - 负载均衡:
 - Dubbo负载均衡策略
 - 配置负载均衡的方式
 - 注解使用(局部配置)
 - 配置yaml(全局配置)
 
- dubbo配置负载均衡优先级
 
Dubbo框架
Dubbo(RPC)概括
RPC包含2部分内容
- 序列化过程: 是调用传输,存储过程中,从内存到内存设计的数据转化过程. 有非常多的序列化方法,序列化协议.
 - 通信过程: 端与端通信对接,选择使用的底层通信方式.(http,tcp)

建立远程通信,序列化数据都属于RPC范畴.只有RPC的功能概念有的问题作为远程访问解决不了的,比如: 通信信息无法自动获取的(ip:port),负载均衡,平均访问的功能 
- Dubbo
 - dubbo是一个RPC框架. 序列化,底层通信协议,都可以已经包装好的.
 - 官网: https://cn.dubbo.apache.org/zh-cn/index.htmlApache Dubbo 是一款高性能、轻量级的开源服务框架。
 - 提示:错误的理解是占用的磁盘空间大小.
 - 轻量级:使用方便,快捷,不会在使用和创建的过程中投入过多的时间成本,和学习成本.
 - SPRING框架轻量级还是重量级: 整体是轻量级的(尤其是在springboot出现之后).早期版本中xml配置是重量级的.
 - 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
 
Dubbo支持的协议
Dubbo协议(也是默认的,也是我们使用的)
RPC协议中不约束底层通信协议,dubbo作为RPC框架原则上也不限制约束。但是Dubbo官方推荐通信协议使用dubbo,这个协议也是Dubbo框架默认协议。
 优点
- 采用NIO单一长链接
 - 高并发处理请求(每个进程中包含了一个连接池)
 - 提升开发效率,降低通信消耗
 
缺点
- 大文件传输性能低,可能出现问题
 
RMI协议
- 除了dubbo协议默认推荐,还支持RMI协议
 
优点
- jdk自带的能力,使用方便。
 
缺点
- 偶尔链接会失败(不确定最新版本是否更新修改了这个问题)
 - 只适用于java(不符合微服务的目的)
 
Hessian协议
 这个Hessian协议是dubbo可以选择的一个序列化协议。
 优点
- 可以于原生Hession互操作,基于HTTP通信协议也可以基于上述dubbo中其它通信协议实现序列化。
 - 序列化的二进制数据长度相比于常见的大部分序列化协议都短.
 
缺点
- 需要hessian.jar的支持,http短连接开销大。
 
Dubbo支持的注册中心
Zookeeper
 第一个是zookeeper。他是分布式协调的服务注册发现组件。
 优点
- 支持分布式,有很多周边产品
 
缺点
- 受限于zookeeper软件的稳定性,Zookeeper专门分布式辅助软件,稳定性较优。
 
Nacos
 spring cloud alibaba众多组件的核心组件注册中心。
 优点
- 阿里的注册中心,无缝集成spring cloud,除此还支持分布式配置管理。
缺点
其它不常见的注册中心 
dubbo的调用结构
dubbo中的调用由一些概念需要理解:
- provider(服务提供者):是微服务某个服务实例,对外提供被调用的功能的实例. 
  
- stock-adapter是provider的角色
 
 - consumer(服务消费者):是微服务某个服务实例,调用其他服务实例的功能的实例 
  
- order-adapter是consumer的角色;
 
 - 注册中心:nacos启动的服务端进程

 
配置服务项目
- 依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
 
- application-local.yml
dubbo:
  application:
    # 所有微服务中application.name 使用${}引用一下我们配置过的这个名字
    name: ${spring.application.name}
  #dubbo协议
  protocol:
    #dubbo使用nacos作为注册中心 注册的协议信息
    #-1表示从20880端口开始,选择第一个空端口
    port: -1
    name: dubbo
  #配置注册中心属性
  registry:
    #告诉dubbo注册中心类型和地址
    address: nacos://localhost:8848
    #分组 和nacos之前分组完全一样的.
    group: 0.0.1-SNAPSHOT
    #命名空间 dev 这个属性没有提示
    parameters:
      registry-type: nacos
      namespace: 8ab3682d-d7c4-487f-a695-5921cbf57eef
    #关闭在nacos中dubbo提供的一些默认的配置注册信息,如果不关闭,随着dubbo
    #客户端运行nacos配置中心列表中会出现大量重复
    use-as-config-center: false
    use-as-metadata-center: false
  consumer:
    #关闭consumer的检查功能,如果不关闭,在consumer一旦发现服务注册中心
    #没有调用的服务,就会报错
    check: false
 
配置类+注解
- provider(服务提供者): 远程调用的被调用的服务实例
- 在项目启动类中,添加dubbo配置导入. 
@EnableDubbo - 在业务层,使用dubbo注解,提供注册信息携带数据.
@DubboService 
- consumer(服务消费者): 远程调用的调用发起的服务实例
- 和provider不同的在于注解的使用.调用远程service实现的引入bean对象的注解不再使用@Resource @Autowired
 
远程调用原理

Dubbo负载均衡
负载均衡:
- 负载: 并发,流量,请求等被程序处理的任务,都可以称为负载.微服务中指的一般是流量和并发.
 - 均衡: 集群分布式环境下,将负载平衡的分配给处理负载的任务单元.

 
Dubbo负载均衡策略
- random: 随机分配负载均衡
 - roundRobin: 轮训分配负载均衡,挨个访问
 - leastactive: 最小活跃分配负载均衡,越闲,分配的越多.使用相应数量在单位时间处理的越多的,越闲
 
配置负载均衡的方式
注解使用(局部配置)
- 提供者
weigth权重值,越高配的越多

 - 消费者(具体以谁为准,以下面优先级为准)

 
配置yaml(全局配置)
- 提供者

 - 消费者

 
dubbo配置负载均衡优先级
- 全局和局部
局部优先级>全局优先级 - provider和consumer
provider优先级>consumer优先级
局部provider>全局provider>局部consumer>全局consumer 













![[相遇 Bug] - ImportError: numpy.core.multiarray failed to import](https://img-blog.csdnimg.cn/1ecb6e98a9c646129ce5f5dd1756a578.png)




