Failover Cluster:失败自动切换,当出现失败,重试其它服务器,通常用于读操作(推荐使用)
可通过retries="2"来设置重试次数(不含第一次)
Failfast Cluster:快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作
Failsafe Cluster:失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作
Failback Cluster:失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作
Forking Cluster:并行调用多个服务器,只要一个成功即返回,通常用于实时性要求较高的读操作
可通过forks="2"来设置最大并行数。
Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于更新提供方本地状态
下面我们来看一下UML图
图1
图2
图1和图2的关系,在这里可以理解为是使用了装饰器模式,根据配置,通过cluster接口找对应的实现,在具体的实现中,在将任务分配给收下的小弟,这里的小弟就是具体的各个Invoker
下面先来看下官方文档给出的调用流程图
图3
该图可以这样理解是MockClusterInvoker-->FailoverInvoker/FailfastInvoker/FailsafeInvoker/FailbackInvoker/ForkingInvoker-->Directory-->Router--->loadBalance-->InvokerWrapper---->FutureFilter
下面先以Dubbo默认的FailoverInvoker,失败切换的策略进行详细讲解
从代码可以看出来,其实是循环一个可调用的列表,当一次调用失败后,就切换到下一个
下面来看下快速失败FailfastInvoker和失败安全failsafeInvoker
快速失败会直接抛出异常,代码如下
失败安全,在失败后只是进行了简单的日志记录,但是会返回一个空的结果集
在来看下失败恢复,失败后会进行记录,然后通过定时任务进行调用,重试间隔时间是5秒,不可配置