以 Invoker 为中心,从 Cluster, Directory, Router, LoadBalance,来解析各个接口。
Cluster
Cluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个。
MergeableCluster
官方解释:按组合并返回结果 ,比如菜单服务,接口一样,但有多种实现,用group区分,现在消费方需从每种group中调用一次返回结果,合并结果返回,这样就可以实现聚合菜单项。
配置使用:
服务方:
|
|
消费方:
|
|
源码分析:
|
|
AvailableCluster
根据字面意思就是可用的。主要用于服务注册时候,生产代理对象。后面会讲到如何向注册中心注册,并获取服务端相应的信息,当然也可以配置使用:
|
|
源码很简单:
|
|
ForkingCluster
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=”2” 来设置最大并行数(官方虽然这么说,但是还是不知道如何配置)。从代码看默认就是2个
源码分析:
|
|
FailfastCluster
快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
|
|
FailoverCluster
失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries=”2” 来设置重试次数(不含第一次)。默认配置,详情见微服务架构之Dubbo集群容错(2)
FailbackCluster
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
|
|
|
|
|
|
FailsafeCluster
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
|
|
BroadcastCluster
广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。
|
|