jadestoner

导航

统计
 

github地址 --> 分享阅读经验 戳我star吧

兄弟们,看完了记得评论一下啊,觉得好的可以赞一下;觉得不好的也恳请各位留下意见啊

 

正文

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" />
posted on   jadestoner  阅读(219)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)
 
点击右上角即可分享
微信分享提示