目录
在网络通信中有很多不确定的因素,比如网络延迟、网络中断等,此类情况出现的话会造成当前这次请求出现失败。当服务通信出现这类问题时,需要采取一定措施来应对。
Dubbo 提供了容错机制来处理这类错误
集群容错方式
Dubbo 的集群容错机制就有以下 10 种 ,其中默认的扩展类为 FailoverCluster。
可双击Shifit搜索集群容错机制接口自行查看接口扩展类 org.apache.dubbo.rpc.cluster.Cluster
集群容错路线
集群容错真正发生在消费端。当消费端发起调用时,会先从服务目录(注册中心)查询满足需求的服务提供者信息,在此基础上进行路由,路由后的结果才会真正进行容错处理
容错机制使用
Consumer消费层利用dubbo注解实现容错机制
timeout 表示 调用等待的时间,超过这个时间 就认为 失败了 retries 尝试调用的次数
@Controller
public class UserController {
@DubboReference(
loadbalance = "consistenthash",
timeout = 1500 , // 等候多久 还没有得到相应 就认为失败
retries = 2, //失败重试次数 三次
cluster = "failover" //cluster : 集群容错机制切换
/*cluster 常用容错机制参数
failover : 容错机制失败切换
failfase : 快速失败,只发起一次调用,失败立马报错
failsafe : 失败安全,直接跳过异常,继续执行后面操作
forking : 同时调用多个,只要成功一个即可
broadcast : 必须都成功才算成功
*/
)
容错机制原理
1.Failover Cluster (默认)
失败自动切换,当出现失败,重试其他服务器(缺省);通常用于读操作,但是重试会带来更长延迟。可以通过retries = “2” 来设置重试次数(不含第一次)
@DubboReference(loadbalance = "random", retries=2, cluster = "failover")
2.Failfast Cluster
快速失败,只会发起一次调用,失败立即报错以下错误。通常用于非幂等性的写操作,比如:新增记录
@DubboReference(loadbalance = "random", cluster = "failfase")
3.Failsafe Cluster
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。不抛出异常,直接继续执行后续的业务
@DubboReference(loadbalance = "random", cluster = "failsafe")
4. Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
@DubboReference(loadbalance = "random", cluster = "failback")
5. Forking Cluster [ fork ]
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。
@DubboReference(loadbalance = "random", cluster = "forking")
6. Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。
@DubboReference(loadbalance = "random", cluster = "broadcast")
后续持续更新中!!
Thanks!!