Dubbo学习笔记(二)
Dubbo常用配置
覆盖策略

规则:
1、精确优先(方法级优先,接口次之,全局配置再次之)
2、消费者设置优先(如果级别一样,则消费方优先,提供方次之)
启动时检查
Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check="true"
可以通过check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。
超时
timeout="3000"
单位毫秒
默认是1000毫秒
重试次数
retries="" 重试次数,不包含第一次调用,0代表不重试
幂等方法(设置重试次数)【查询、删除、修改……】
非幂等方法(不能设置重试次数)【新增】
多版本
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
- 在低压力时间段,先升级一半提供者为新版本
 - 再将所有消费者升级为新版本
 - 然后将剩下的一半提供者升级为新版本
 
version="1.0.0"
version="2.0.0"
version="*"
本地存根

<dubbo:service interface="com.foo.BarService" stub="com.foo.BarServiceStub" />
 
Spring Boot 与 Dubbo整合的三种方式
- 导入dubbo-starter,在application.properties配置属性,使用
@Service暴露服务,使用@Reference引用服务 - 导入dubbo-starter,保留dubbo xml 配置文件,使用
@ImportResource(locations="classpath:provider.xml") - 使用注解API的方式,将每一个组件手动创建到容器中,让Dubbo扫描其他的组件
 

Dubbo高可用
Zookeeper宕机
现象:Zookeeper注册中心宕机,还可以消费Dubbo暴露的服务
原因:
 
高可用:通过设计,减少系统不能服务的时间
负载均衡机制
在集群负载均衡时,Dubbo提供了多种负载均衡策略,缺省时为random随机调用
 

可以通过loadbalance=""来指定负载均衡策略
服务降级
当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略地不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
可以通过服务降级功能临时屏蔽某个出错的非关机服务,并定义降级后的返回策略。
 
mock=force:return+null表示消费方对该服务的方法调用都直接返回null值,不发起远程调用。用来屏蔽不重要服务不可用时,对调用方的影响。mock=fail:return+null表示消费方对该服务的方法调用在失败后,再返回null值,不抛出异常。用来容忍不重要服务不稳定时对调用方的影响。
服务容错
在集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重试。
可以通过整合Hystrix来进行服务容错
spring-cloud-starter-netflix-hystrix
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>2.2.10.RELEASE</version>
</dependency>
 
在Application类上增加@EnableHystrix来启动Hystrix
使用@HystrixCommand来处理容错异常
Dubbo原理
RPC原理&Netty原理

Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。它极大地简化了TCP、UDP等网络编程。
BIO:(Blocking IO)

NIO:(Non-Blocking IO)

Netty通信原理

框架设计
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wsxh8rdK-1676646783986)(assets/dubbo-framework.jpg)]
- config 配置层:对外配置接口,以 
ServiceConfig,ReferenceConfig为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类 - proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 
ServiceProxy为中心,扩展接口为ProxyFactory - registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 
RegistryFactory,Registry,RegistryService - cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 
Invoker为中心,扩展接口为Cluster,Directory,Router,LoadBalance - monitor 监控层:RPC 调用次数和调用时间监控,以 
Statistics为中心,扩展接口为MonitorFactory,Monitor,MonitorService - protocol 远程调用层:封装 RPC 调用,以 
Invocation,Result为中心,扩展接口为Protocol,Invoker,Exporter - exchange 信息交换层:封装请求响应模式,同步转异步,以 
Request,Response为中心,扩展接口为Exchanger,ExchangeChannel,ExchangeClient,ExchangeServer - transport 网络传输层:抽象 mina 和 netty 为统一接口,以 
Message为中心,扩展接口为Channel,Transporter,Client,Server,Codec - serialize 数据序列化层:可复用的一些工具,扩展接口为 
Serialization,ObjectInput,ObjectOutput,ThreadPool 
标签解析
TODO: 阅读Dubbo源码
服务暴露流程
TODO: 阅读Dubbo源码
服务引用流程
TODO: 阅读Dubbo源码
服务调用流程
TODO: 阅读Dubbo源码



















