【SpringBoot】Spring Boot 单体应用升级 Spring Cloud 微服务
Spring Cloud 是在 Spring Boot 之上构建的一套微服务生态体系,包括服务发现、配置中心、限流降级、分布式事务、异步消息等,因此通过增加依赖、注解等简单的四步即可完成 Spring Boot 应用到 Spring Cloud 升级。
Spring Boot 应用升级为 Spring Cloud
Cloud Native
以下是应用升级 Spring Cloud 的完整步骤。
第一步:添加 Spring Cloud 依赖
首先,为应用添加 Spring Cloud 与 Spring Cloud Alibaba 依赖。注意根据当前应用 Spring Boot 版本选择合适的 Spring Cloud 版本,具体参见版本映射表[1]。??????
<properties><spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version><spring-cloud.version>2022.0.0</spring-cloud.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Nacos 服务发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 服务发现:OpenFeign服务调用 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- 服务发现:OpenFeign服务调用 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies>
以上我们添加了服务注册发现、OpenFeign 等依赖。
第二步:添加配置
在应用 application.yml 或者 application.properties 文件中增加以下配置项,设置应用名、注册中心地址。
application.yml:
spring:application:#项目名称必填,在注册中心唯一#最好和之前域名规范、kubernetes service名等保持一致(会作为调用与负载均衡依据)name: service-providercloud:nacos:discovery: #启用 spring cloud nacos discoveryserver-addr: 127.0.0.1:8848
application.properties:???????
#项目名称必填,在注册中心唯一#最好和之前域名规范、kubernetes service名等保持一致(会作为调用与负载均衡依据)spring.application.name=service-provider#启用 spring cloud nacos discoveryspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第三步:启动类增加注解
启动类增加 EnableDiscoveryClient EnableFeignClients 注解,启动服务地址自动注册与发现。???????
@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}}
第四步:调整服务调用方式
🔔 注意!
1. 为了保证平滑升级,请确保下游应用完成 Spring Cloud 改造并在注册中心注册服务后再进行调用方式改造。
2. RestTemplate/FeignClient 默认发起调用的 hostname (示例中的 service-provider)是对端 Spring Cloud 应用名。因此,为了保证尽可能少的改造量,改造过程中设置的应用名 spring.name=service-provider 最好和之前的命名规范保持一致。比如:
-  
  -  如果之前有自定义域名,则和域名定义保持一致 
-  如果之前用的 Kubernetes Service,则和 Service Name 保持一致 
 
-  
1. RestTemplate 模式
为之前的 RestTemplate Bean 添加 @LoadBlanced 注解,使得 RestTemplate 接入服务发现与负载均衡:??????
@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
其它原有 RestTemplate 发起调用的代码保持不变,只需调整 hostname 即可,如下所示。???????
@RestControllerpublic class TestController {@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/echo-rest/{str}")public String rest(@PathVariable String str) {return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);}}
2. FeignClient 模式
使用 @FeignClient 注解将 EchoService 这个接口包装成一个 FeignClient,属性 name 对应对端应用名 spring.name=service-provider。??????
//@FeignClient(name = "service-provider", url="http://service.example.com/")@FeignClient(name = "service-provider")public interface EchoService {@GetMapping(value = "/echo/{str}")String echo(@PathVariable("str") String str);}
将 EchoService 作为标准 bean 注入,即可对远端服务发起请求了。???????
@RestControllerpublic class TestController {@Autowiredprivate EchoService echoService;@GetMapping(value = "/echo-feign/{str}")public String feign(@PathVariable String str) {return echoService.echo(str);}}
3. HtClient、自定义 HTTP 访问工具等
对于使用 HttpClient 或者自行封装 http 调用工具的用户,建议统一改造为以上 1、2 两种调用模式之一。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!