zoukankan      html  css  js  c++  java
  • dubbo user guider笔记之四Demos----Start check && Fault Tolerance Strategy

    Check on start up(启动检查)

    Dubbo默认会在启动的时候检查它依赖的服务是否可用。当发现服务不可用的时候它会抛出一个异常来组织spring完成初始化,这回促使你在应用发布之前及早地发现问题,默认配置:check=。

    可以使用check=false来关闭检查。例如,测试环境的时候有些服务不需要关心,或者必须先启动一个来防止循环依赖的场景。

    另外,假如你的spring bean是懒加载的,需要先关闭检查,否则当一个服务临时不可用的时候,你的服务会抛出一个异常,进而得到一个空的引用。如果你配置了check=false,你会得到一个引用,当服务重启的时候会自动重连。

    Example

    Use the spring configuration file

    禁用一个服务的启动检查

    <dubbo:reference interface = "com.foo.BarService" check = "false" />
    

    禁用所有服务的启动检查

    <dubbo:consumer check = "false" />
    

    禁用注册中心的启动检查

    <dubbo:registry check="false" />
    
    

    Use the spring configuration file

    dubbo.reference.com.foo.BarService.check = false
    dubbo.reference.check = false
    dubbo.consumer.check = false
    dubbo.registry.check = false
    

    Use the -D parameter

    java -Ddubbo.reference.com.foo.BarService.check = false
    java -Ddubbo.reference.check = false
    java -Ddubbo.consumer.check = false
    java -Ddubbo.registry.check = false
    

    Fault Tolerance Strategy (容错策略)

    当集群调用失败时,Dubbo提供了一系列的容错策略,并使用默认的故障转移重试。
    image

    节点间的关系如下:

    • Invoker :Invoker 是Provider中可调用服务的抽象,Invoker打包了Provider的地址和Service的接口;
    • Directory :Directory 代表了多个Invoker,可以认为它是List,但是不像list,这个的值可以动态被改变,比如当registry 推送变化的时候;
    • Cluster :Cluster 将Directory中的多个Invoker伪装成一个Invoker,它是上层的透明的封装的处理过程,包括了容器逻辑,调用失败,试试另一个。
    • Router :Router 负责从多个Invokers中根基于调用规则选择出一个子集出来,比如读写分离,应用隔离等;
    • LoadBalance:LoadBalance负责从多个Invoker中选择出一个特殊的作为本次调用。选择的过程包括了负载均衡,假如调用失败了,它回去重新选择。

    Cluster fault-tolerant mode

    可以自定义集群的容错策略

    默认策略:

    • 【failfast】
      快速失效,只发起一次调用,失败立即报错。通常用于非幂等性写操作,比如说新增记录
    <dubbo:service cluster="failfast"> 
    或者
    <dubbo:reference cluster="failfast"
    
    • 【failsafe】
      失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作
    <dubbo:service cluster="failsafe"> 
    或者
    <dubbo:reference cluster="failsafe">
    
    • 【failback】
      失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作
    <dubbo:service cluster="failback"> 
    或者
    <dubbo:reference cluster="failback">
    
    • 【forking】
      并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多的服务器资源。可通过forks=“2”来设置最大并行数。
    <dubbo:service cluster="forking"> 
    或者
    <dubbo:reference cluster="forking">
    

    自定义策略:

    1. 拓展org.apache.dubbo.rpc.cluster.Cluster接口
    2. XxxCluster.java:
    package com.xxx;
     
    import org.apache.dubbo.rpc.cluster.Cluster;
    import org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker;
    import org.apache.dubbo.rpc.cluster.Directory;
    import org.apache.dubbo.rpc.cluster.LoadBalance;
    import org.apache.dubbo.rpc.Invoker;
    import org.apache.dubbo.rpc.Invocation;
    import org.apache.dubbo.rpc.Result;
    import org.apache.dubbo.rpc.RpcException;
     
    public class XxxCluster implements Cluster {
        public <T> Invoker<T> merge(Directory<T> directory) throws RpcException {
            return new AbstractClusterInvoker<T>(directory) {
                public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException {
                    // ...
                }
            };
        }
    }
    
    1. META-INF/dubbo/org.apache.dubbo.rpc.cluster.Cluster:
    xxx=com.xxx.XxxCluster
    
    1. 目录结构图
    src
     |-main
        |-java
            |-com
                |-xxx
                    |-XxxCluster.java (Cluster implementation)
        |-resources
            |-META-INF
                |-dubbo
                    |-org.apache.dubbo.rpc.cluster.Cluster (plain text file with the content: xxx=com.xxx.XxxCluster)
    
    1. 使用的时候
    <dubbo:protocol cluster="xxx" />
    或
    <dubbo:provider cluster="xxx" />
    
  • 相关阅读:
    .net core2.0 中使用aspectcore实现aop
    [Superset] 设置Superset的登录设置
    [Python]Pandas对于非唯一的label index的数据选择问题
    Data Science Radar测试结果
    [R]R包版本更迭【持续更新】
    [面试] 删除多余的数组内容
    [Python]Python中的包(Package)
    [Linux] 使用Yum在CentOS上安装MySQL
    [pyMongo]insert_many的Bulkwrite实现机制
    [Git]2018-10 解决git cmd中文乱码问题
  • 原文地址:https://www.cnblogs.com/po-shi/p/11251269.html
Copyright © 2011-2022 走看看