消费方进行RPC时,通过一定策略选择集群中不同机器作为服务提供方。三种策略:
消费者调用一个服务,分为三步:
如果在服务端和消费端只在其中一方配置了timeout,那么没有歧义,表示消费端调用服务的超时时间,消费端如果超过时间还没有收到响应结果,则消费端会抛超时异常,但,服务端不会抛异常,服务端在执行服务后,会检查执行该服务的时间,如果超过timeout,则会打印一个超时日志**。服务会正常的执行完。
如果在服务端和消费端各配了一个timeout,那就比较复杂了,假设
在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。
Invoker
Provider
Service
Directory
List<Invoker>
List
Cluster
Router
LoadBalance
服务容错是调用失败后,在集群内部重新选举一个本次调用的服务提供者,而降级是单次调用失败后,本服务提供方所采取的后续逻辑,通常有如下配置方案:
mock=force:return+null
mock=fail:return+null
本地伪装就是mock,是服务降级的一种实现方案。
在执行Dubbo的代理方法之前,执行一端预先定义好的客户端方法,如下是一段stub代码:
public class BarServiceStub implements BarService { private final BarService barService; // 构造函数传入真正的远程代理对象 public BarServiceStub(BarService barService){ this.barService = barService; } public String sayHello(String name) { // 此代码在客户端执行, 你可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法,等等 try { return barService.sayHello(name);//真正执行dubbo代理逻辑 } catch (Exception e) { // 你可以容错,可以做任何AOP拦截事项 return "容错数据"; } } }
提交评论