程序员L札记

V1

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札记

更多原创文章,请扫码关注我的微信公众号
更多原创文章,请扫码关注我的微信公众号

分类:

后端

标签:

Java

作者介绍

程序员L札记
V1