与Spring Cloud 集成
Dubbo
在早期
Dubbo
是与
Spring Cloud
集成有一些脱落,但是在
Spring Cloud Alibaba
出现后,
spring-cloud-starter-dubbo
与Spring Cloud完美集成
Feign
Spring Cloud 最早支持的RPC框架,兼容性好
Dubbo
图片官网链接
同时支持服务端负载均衡和客户端负载均衡配置,灵活度非常高
Feign
Feign自身是没有负载均衡能力的,之前默认使用Ribbon作为负载均衡的组件,但是Netfix 已经不在维护了
新版本的Spring Cloud已经将Ribbon替换成Spring Cloud Load Balancer,
Ribbon
是客户端级别的负载均衡,不像dubbo支持客户端和服务端双向配置
Dubbo
支持多种容错策略:
Failover Cluste:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过
retries="2"
来设置重试次数(不含第一次)。默认容错机制
Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
Failback Cluster :失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过
forks="2"
来设置最大并行数。
Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。
Feign
Feign默认使用
Netfix Hystrix
作为服务熔断的组件。Hystix提供了服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。
目前 Hystrix 已经处于维护(maintenance)状态,不再继续开发,这个消息是Netfix 在2018年对外宣布的。Hystrix GitHub页面上也说明了该项目目前处于维护模式
在使用dubbo后续的熔断降级也还可以使用
Alibaba Sentinel
Dubbo
dubbo为了提供对
RestTemplate
和
OpenFeign
客户端端的支持,在
Dubbo Spring Cloud
提供了
@DubboTransported
注解,使客户端无需额外处理即可兼容
RestTemplate
和
OpenFeign
的调用,换而言之在不调整 Feign 接口以及
RestTemplate
URL 的前提下,可以实现无缝迁移
比如在客户端使用
OpenFeign
调用duboo服务,只需要添加如下注解如下
@FeignClient("order")
@DubboTransported(protocol = "dubbo")
使用RestTemplate或OpenFeign调用Dubbo服务会经历以下过程:
根据服务名得到注册中心的Dubbo服务DubboMetadataService。
使用DubboMetadataService里提供的getServiceRestMetadata方法获取要使用的Dubbo服务和对应的Rest元数据。
基于Dubbo服务和Rest元数据构造GenericService。
服务调用过程中使用GenericService发起泛化调用。
Feign
没有提供对dubbo
无缝迁移的支持
Dubbo
中文、英文都有,比较全面
Feign
英文文档,全面性一般
dubbo作为Spring Cloud Alibaba
中的RPC组件,从社区活跃度来说是Feign
远不能及的。其次Netfix
大多微服务组件都不在维护,而Spring Cloud Alibaba
逐渐成为趋势
从功能上来说dubbo
更多,也就意味着更重,反观Feign
肯定是更轻量
从性能来说dubbo
肯定是要比Feign
高的
从支持的协议来说也是dubbo
更多更灵活
Feign
服务调用不需要发额外的jar包去依赖(服务调用不用限定全类名),可以直接调用,这点算是优势也是劣势。
如果前期使用Feign
,后期要替换成dubbo
,dubbo
提供了无缝迁移
觉得文章不错请扫码关注我吧
基础架构 @apache
粉丝