Spring Boot 单体应用升级 Spring Cloud 微服务
作者:刘军
Spring Cloud 是在 Spring Boot 之上构建的一套微服务生态体系,包括服务发现、配置中心、限流降级、分布式事务、异步消息等,因此通过增加依赖、注解等简单的四步即可完成 Spring Boot 应用到 Spring Cloud 升级。
*Spring Cloud Alibaba (SCA) 官网正式上线:sca.aliyun.com
Spring Boot 应用升级为 Spring Cloud
以下是应用升级 Spring Cloud 的完整步骤。
第一步:添加 Spring Cloud 依赖
首先,为应用添加 Spring Cloud 与 Spring Cloud Alibaba 依赖。注意根据当前应用 Spring Boot 版本选择合适的 Spring Cloud 版本,具体参见版本映射表 [ 1] 。
以上我们添加了服务注册发现、OpenFeign 等依赖。
第二步:添加配置
在应用 application.yml 或者 application.properties 文件中增加以下配置项,设置应用名、注册中心地址。
application.yml:
application.properties:
第三步:启动类增加注解
启动类增加 EnableDiscoveryClient EnableFeignClients 注解,启动服务地址自动注册与发现。
第四步:调整服务调用方式
🔔 注意!
为了保证平滑升级,请确保下游应用完成 Spring Cloud 改造并在注册中心注册服务后再进行调用方式改造。
RestTemplate/FeignClient 默认发起调用的 hostname (示例中的 service-provider)是对端 Spring Cloud 应用名。因此,为了保证尽可能少的改造量,改造过程中设置的应用名 spring.name=service-provider 最好和之前的命名规范保持一致。比如:
如果之前有自定义域名,则和域名定义保持一致
如果之前用的 Kubernetes Service,则和 Service Name 保持一致
1. RestTemplate 模式
为之前的 RestTemplate Bean 添加 @LoadBlanced 注解,使得 RestTemplate 接入服务发现与负载均衡:
其它原有 RestTemplate 发起调用的代码保持不变,只需调整 hostname 即可,如下所示。
2. FeignClient 模式
使用 @FeignClient 注解将 EchoService 这个接口包装成一个 FeignClient,属性 name 对应对端应用名 spring.name=service-provider。
将 EchoService 作为标准 bean 注入,即可对远端服务发起请求了。
3. HtClient、自定义 HTTP 访问工具等
对于使用 HttpClient 或者自行封装 http 调用工具的用户,建议统一改造为以上 1、2 两种调用模式之一。
参考资料
完整示例源码
基于 Spring Boot 构建的应用架构变化多样,比如可能是以下一些常用架构的任意一种,但不论哪种架构,升级 Spring Cloud 的大致改造方式都是类似的(都可以转为基于 Nacos 注册中心的地址发现与负载均衡)。
基于 DNS 自定义域名,服务间的通过域名调用实现负载均衡
基于 SLB 的中心化流量转发,调用直接转发到 SLB,由 SLB 实现在服务间实现流量转发
基于 Kubernetes Service 微服务体系,依赖 Kubernetes ClusterIP 等实现负载均衡与调用转发
在此,我们以 DNS 自定义域名架构为例,提供了一个 Spring Boot 到 Spring Cloud 升级改造的完整示例,升级前后的应用架构图如下。具体可参见 Github 源码链接 [ 2] 。
升级前 SpringBoot 架构 👆
升级后 SpringCloud 架构 👆
Spring Boot 与 Spring Cloud Alibaba 版本对应关系
请根据您使用的 Spring Boot 版本,选择兼容的 Spring Cloud Alibaba 版本:
Spring Cloud Alibaba Starters 列表与使用手册
spring-cloud-starter-alibaba-nacos-discovery [ 3]
spring-cloud-starter-alibaba-nacos-config [ 4]
spring-cloud-starter-alibaba-nacos-sentinel [ 5]
spring-cloud-starter-alibaba-nacos-rocketmq [ 6]
spring-cloud-starter-alibaba-nacos-seata [ 7]
Spring Cloud Alibaba 集成的组件版本
每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本如下表所示:
相关链接:
[1] 版本映射表
https://sca.aliyun.com/zh-cn/docs/next/best-practice/spring-boot-to-spring-cloud/
[2] Github 源码链接
https://github.com/spring-cloud-alibaba-group/springboot-transfer-to-springcloud
[3] spring-cloud-starter-alibaba-nacos-discovery
[4] spring-cloud-starter-alibaba-nacos-config
[5] spring-cloud-starter-alibaba-nacos-sentinel
https://sca.aliyun.com/zh-cn/docs/next/user-guide/sentinel/quick-start/
[6] spring-cloud-starter-alibaba-nacos-rocketmq
https://sca.aliyun.com/zh-cn/docs/next/user-guide/rocketmq/quick-start/
[7] spring-cloud-starter-alibaba-nacos-seata
https://sca.aliyun.com/zh-cn/docs/next/user-guide/seata/quick-start/
版权声明: 本文为 InfoQ 作者【阿里巴巴云原生】的原创文章。
原文链接:【http://xie.infoq.cn/article/5805e73f55afb713468b11068】。文章转载请联系作者。
评论