长春长春网站建设/广州今日刚刚发生的新闻
前言: Spring Cloud 默认的服务调用依赖 OpenFeign 或 @LoadBalanced RestTemplate 使用 REST 进行调用。Spring Cloud Alibaba Dubbo 只需使用 @DubboTransported 注解即可将底层的 Rest 协议无缝切换成 Dubbo RPC 协议,进行 RPC 调用。这一举措让 Spring Cloud 的客户端调用多了一个新的 RPC 选择,实现服务间多种协议的通讯。
//RestTemplate方式
@Bean
@LoadBalanced
@DubboTransported
public RestTemplate restTemplate() {return new RestTemplate();
}//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);
}
一、@DubboTransported 注解无缝迁移为Dubbo调用
Dubbo Spring Cloud是Spring Cloud Alibaba项目内部提供的一个可以使用Spring Cloud客户端RestTemplate或OpenFeign无缝迁移到Dubbo调用或者调用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 注解 @Service和 @Reference暴露和引用 Dubbo服务。
二、从Open Feign迁移到Dubbo简单示例
2.1、Spring Cloud Provider端配置
a>引入spring-cloud-starter-dubbo 依赖
<!-- Dubbo Spring Cloud Starter --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency>
2.2、 Spring Cloud Consumer端配置
a> 引入spring-cloud-starter-dubbo 依赖
<!-- Dubbo Spring Cloud Starter --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency>
b>application.properties配置文件增加Dubbo配置
dubbo.protocol.name=dubbo
#dubbo.application.name=order-service
dubbo.protocol.port=-1
#避免subscribe all services, a lot of memory and CPU cycles may be used
dubbo.cloud.subscribed-services="product-service"
c>Consumer 客户端加上 @DubboTransported 注解:
OpenFeign接口添加 @DubboTransported 注解,或者RestTemplate调用对象添加 @DubboTransported 注解
RestTemplate 和 OpenFeign 客户端都支持 @DubboTransported 注解。
RestTemplate 的使用方式如下:
OpenFeign 的使用方式如下:
2.3、使用 RestTemplate 或 OpenFeign 调用 Dubbo 服务
使用 RestTemplate调用的方式如下:
使用 OpenFeign调用的方式如下:
参考链接:
Spring Cloud整合Dubbo——从Open Feign迁移到Dubbo
微服务调用组件 - dubb
Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了