Spring Cloud 是在 Spring Boot 之上構(gòu)建的一套微服務(wù)生態(tài)體系,包括服務(wù)發(fā)現(xiàn)、配置中心、限流降級、分布式事務(wù)、異步消息等,因此通過增加依賴、注解等簡單的四步即可完成 Spring Boot 應(yīng)用到 Spring Cloud 升級。
Spring Boot 應(yīng)用升級為 Spring Cloud
Cloud Native
以下是應(yīng)用升級 Spring Cloud 的完整步驟。
第一步:添加 Spring Cloud 依賴
首先,為應(yīng)用添加 Spring Cloud 與 Spring Cloud Alibaba 依賴。注意根據(jù)當(dāng)前應(yīng)用 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 服務(wù)發(fā)現(xiàn) -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 服務(wù)發(fā)現(xiàn):OpenFeign服務(wù)調(diào)用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 服務(wù)發(fā)現(xiàn):OpenFeign服務(wù)調(diào)用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
以上我們添加了服務(wù)注冊發(fā)現(xiàn)、OpenFeign 等依賴。
第二步:添加配置
在應(yīng)用 application.yml 或者 application.properties 文件中增加以下配置項(xiàng),設(shè)置應(yīng)用名、注冊中心地址。
application.yml:
spring:
application:
#項(xiàng)目名稱必填,在注冊中心唯一
#最好和之前域名規(guī)范、kubernetes service名等保持一致(會作為調(diào)用與負(fù)載均衡依據(jù))
name: service-provider
cloud:
nacos:
discovery: #啟用 spring cloud nacos discovery
server-addr: 127.0.0.1:8848
application.properties:???????
#項(xiàng)目名稱必填,在注冊中心唯一
#最好和之前域名規(guī)范、kubernetes service名等保持一致(會作為調(diào)用與負(fù)載均衡依據(jù))
spring.application.name=service-provider
#啟用 spring cloud nacos discovery
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第三步:啟動類增加注解
啟動類增加 EnableDiscoveryClient EnableFeignClients 注解,啟動服務(wù)地址自動注冊與發(fā)現(xiàn)。???????
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
第四步:調(diào)整服務(wù)調(diào)用方式
?? 注意!
1. 為了保證平滑升級,請確保下游應(yīng)用完成 Spring Cloud 改造并在注冊中心注冊服務(wù)后再進(jìn)行調(diào)用方式改造。
2. RestTemplate/FeignClient 默認(rèn)發(fā)起調(diào)用的 hostname (示例中的 service-provider)是對端 Spring Cloud 應(yīng)用名。因此,為了保證盡可能少的改造量,改造過程中設(shè)置的應(yīng)用名 spring.name=service-provider 最好和之前的命名規(guī)范保持一致。比如:
-
-
如果之前有自定義域名,則和域名定義保持一致
-
如果之前用的 Kubernetes Service,則和 Service Name 保持一致
-
1. RestTemplate 模式
為之前的 RestTemplate Bean 添加 @LoadBlanced 注解,使得 RestTemplate 接入服務(wù)發(fā)現(xiàn)與負(fù)載均衡:??????
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
其它原有 RestTemplate 發(fā)起調(diào)用的代碼保持不變,只需調(diào)整 hostname 即可,如下所示。???????
@RestController
public class TestController {
@Autowired
private 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 對應(yīng)對端應(yīng)用名 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 作為標(biāo)準(zhǔn) bean 注入,即可對遠(yuǎn)端服務(wù)發(fā)起請求了。???????
@RestController
public class TestController {
@Autowired
private EchoService echoService;
@GetMapping(value = "/echo-feign/{str}")
public String feign(@PathVariable String str) {
return echoService.echo(str);
}
}
3. HtClient、自定義 HTTP 訪問工具等文章來源:http://www.zghlxwxcb.cn/news/detail-784082.html
對于使用 HttpClient 或者自行封裝 http 調(diào)用工具的用戶,建議統(tǒng)一改造為以上 1、2 兩種調(diào)用模式之一。文章來源地址http://www.zghlxwxcb.cn/news/detail-784082.html
到了這里,關(guān)于【SpringBoot】Spring Boot 單體應(yīng)用升級 Spring Cloud 微服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!