程序员L札记
2022/06/14阅读:26主题:橙心
Spring Cloud 服务调用迁移为Dubbo
前言
Dubbo Spring Cloud是Spring Cloud Alibaba项目内部提供的一个可以使用Spring Cloud客户端RestTemplate或OpenFeign无缝迁移到Dubbo调用或者调用Dubbo服务的模块。
Spring Cloud 默认的服务调用依赖 OpenFeign 或 @LoadBalanced RestTemplate 使用 REST 进行调用。Spring Cloud Alibaba Dubbo 只需使用 @DubboTransported 注解即可将底层的 Rest 协议无缝切换成 Dubbo RPC 协议,进行 RPC 调用。这一举措让 Spring Cloud 的客户端调用多了一个新的 RPC 选择,实现服务间多种协议的通讯。
@DubboTransported 注解无缝迁移为Dubbo调用
尽管 Dubbo Spring Cloud 完全地保留了原生 Spring Cloud 服务调用特性,不过 Dubbo 服务治理的能力是 Spring Cloud Open Feign 所不及的,如高性能、高可用以及负载均衡稳定性等方面。因此,建议开发人员将 Spring Cloud Open Feign 或者@LoadBalanced RestTemplate 迁移为 Dubbo 服务
。
考虑到迁移过程并非一蹴而就,即使是那些有意将 Spring Cloud 迁移至 Dubbo 的小伙伴,当面对其中迁移和改造的成本时,难免望而却步。因此,Dubbo Spring Cloud 提供了方案,即@DubboTransported 注解。该注解能够帮助服务消费端的 Spring Cloud Open Feign 接口以及 @LoadBalanced RestTemplate Bean 底层走 Dubbo 调用(可切换 Dubbo 支持的协议)。换言之,在不调整 Feign 接口以及RestTemplate URL 的前提下,实现无缝迁移。
如果迁移时间充分的话,还是建议使用 Dubbo 服务重构系统中的原生 Spring Cloud 服务的定义,应用可通过 Apache Dubbo 注解 @DubboService和 @DubboReference暴露和引用 Dubbo服务。
从RestTemplate迁移到dubbo
//RestTemplate方式
@Bean
@LoadBalanced
@DubboTransported
public RestTemplate restTemplate() {
return new RestTemplate();
}
从OpenFeign迁移到dubbo
//OpenFeign方式
@FeignClient("dubbo-provider")
@DubboTransported(protocol = "dubbo")
public interface DubboFeignRestService {
@GetMapping(value = "/param")
String param(@RequestParam("param") String param);
@PostMapping("/saveB")
String saveB(@RequestParam("a") int a, @RequestParam("b") String b);
}
完整的代码示例请移步《Dubbo Spring Cloud入门示例》
欢迎关注我的公众号:程序员L札记

作者介绍