Dubbo 服务治理

dubbo 提供的启动类:Main.main();

容错策略(通过配置服务的cluster):

  • 6种容错:
    1.重试 :failover(默认) 重试3次= retries 2次+ 本身调用一次
    2.快速失败:failfast
    3.失败之后记录日志:failback
    4.失败安全:failsafe
    5.并行调用多个服务:forking
    6.广播出去:任何一台报错就失败。(更新所有节点缓存)

服务降级(通过在客户端reference配置mock制定实现服务降级的类):

  • 异常降级
  • 限流降级
  • 熔断降级

服务循环依赖:

  • 全局配置dubbo.registry.check=false //启动时连接失败会发起重试
  • reference 配置 check=false 服务启动时连接失败会在服务启动后在发起重试

主机绑定:

  • 配置dubbo.registry.host 否则通过访问注册中心拿到本地的IP地址

元数据中心(减少url传输数据,建议存储在redis中):

  • 配置dubbo.metadata-report.address=注册中心地址
  • 配置dubbo.registry.simplied=true

@SPI:
@SPI(“xxxx”) 表示当前扩展的默认实现

Dubbo SPI(ExtensionLoader):

  • 静态扩展点

需要指定扩展的类及配置文件中的key


image.png
  • 自适应扩展点
  1. @Adptive

@Adptive加在类上
- 目的:针对具体的实现进行适配


image.png

@Adptive加在方法上
- 动态生成类(Protocol$Adaptive Implement Protocol)


image.png
  • 激活扩展点

通过url 过滤参数, @Activate 通过value 设置激活条件(相当于condition)

服务发布:

image.png

Server端 Invoker的构建:

// 1.PROXY_FACTORY 通过自适应扩展点进行动态适配了StubProxyFactoryWrapper(JavassistProxyFactory())
// 相当于先调用了StubProxyFactoryWrapper.getInvoker() 然后调用了JavassistProxyFactory.getInvoker()
 Invoker invoker = PROXY_FACTORY.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(EXPORT_KEY, url.toFullString()));
// 2. 使用 proxy.getClass()通过javassist 动态生成了目标方法,**如下图:**
final Wrapper wrapper = Wrapper.getWrapper(proxy.getClass().getName().indexOf('$') < 0 ? proxy.getClass() : type);
// 3.当客户端调用的时候直接从对应协议的类中获取缓存的Invoker 进行调用。
image.png

Server Invoker包装过程:

image.png

Sever 端接收请求:

image.png

Client端获取代理对象:

image.png

Client端连接注册中心:
见:Client端获取代理对象
Client Invoker:
见:Client端获取代理对象
Client端调用:

image.png

Directory:

image.png

你可能感兴趣的:(Dubbo 服务治理)