Dubbo集群容错是靠配置cluster属性来做
支持改属性的标签为<dubbo:service>,<dubbo:referece>,<dubbo:consumer>,<dubbo:provider>
但是后两个粒度太粗,一般不采用
该属性是可选的,默认值是failover
以下是各种可选值及其含义:
1.failover 失败自动切换 (缺省值)
当出现失败时,重试其他服务器. 通常用于读操作, 但切换其他机器重试会带来更长延迟 .所以可通过retries="2"来设置重试次数 (不含第一次),retries了这么多次之后,如果还是失败,再返回失败. 实例: 有5台服务器, 在retries=2的情况下, 消费者调用A机失败, 接着重试B机, 然后又重试C机, 最后返回失败. 为了避免长延迟,可以将该值配置为0, 也就是失败马上返回,不去尝试其他机器
为什么说这种方式通常用于读操作,而不是写操作. 因为用在写操作,可能为导致重复写
<dubbo:service cluster="failback" retries="2"/> 或者 <dubbo:reference cluster="failback" retries="2"/>
2.failfast 快速失败
只发起一次调用,失败立即报错,通常用于非幂等性的写操作,比如新增记录
非幂等性的含义是,无论发起多少次请求,最后的结果都是一样的
3.failsafe
失败安全,出现异常时,直接忽略。
通常用于写入审计日志等操作
4.failback
失败自动恢复, 后台记录失败请求, 定时重发, 通常用于消息通知操作
<dubbo:service cluster="failback"/> 或者 <dubbo:reference cluster="failback"/>
一般不用 ,可能监控中心这类应用用
5.forking
并行调用多个服务器,只要一个成功返回,通常用于实时性要求较高的读操作,但需要浪费更多服务资源
可通过forks="2" 来设置最大并行数
<dubbo:service cluster="forking" forks="2"/> 或者 <dubbo:reference cluster="forking" forks="2"/>
6.broadcast
广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)
通常用于通知所有提供者更新缓存或日志等本地资源信息。