失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
在FailsafeCluster中服务的调用实现实在FailsafeClusterInvoker中完成的
public class FailsafeCluster implements Cluster { public final static String NAME = "failsafe"; publicInvoker join(Directory directory) throws RpcException { return new FailsafeClusterInvoker (directory); } }
FailsafeClusterInvoker中简单来说通过负载均衡查找服务,调用服务如果调用失败则直接返回空的结果。
public class FailsafeClusterInvokerextends AbstractClusterInvoker { private static final Logger logger = LoggerFactory.getLogger(FailsafeClusterInvoker.class); public FailsafeClusterInvoker(Directory directory) { super(directory); } public Result doInvoke(Invocation invocation, List<> > invokers, LoadBalance loadbalance) throws RpcException { try { checkInvokers(invokers, invocation); //负载均衡算法查找服务 Invoker invoker = select(loadbalance, invocation, invokers, null); //直接调用返回 return invoker.invoke(invocation); } catch (Throwable e) { logger.error("Failsafe ignore exception: " + e.getMessage(), e); //如果失败则返回空的结果 return new RpcResult(); // ignore } } }