Spring Cloud 2020 版本最佳實(shí)踐,你落伍了!
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
作者:低調(diào)小熊貓
來(lái)源:https://ilovey.live/2021/09/26/springcloud2020/
Spring Cloud 2020.0.4 發(fā)布,安排!
Spring Cloud 從H版本之后命名方式改為2020.x.x,話說(shuō)為毛最新版本不是2021命名,來(lái)自強(qiáng)迫癥的難受。
使用組件列表:
注冊(cè)中心:nacos,替代方案eureka、consul、zookeeper 配置中心: nacos ,替代方案sc config、consul config 調(diào)用:feign,替代方案:resttempate 熔斷:sentinel、,替代方案:Resilience4j 熔斷監(jiān)控:sentinel dashboard 負(fù)載均衡:sc loadbalancer 網(wǎng)關(guān):spring cloud gateway 鏈路:spring cloud sleuth+zipkin,替代方案:skywalking等
總體架構(gòu)圖

版本關(guān)系

使用nacos作為注冊(cè)中心和配置中心
下載nacos
下載地址:https://github.com/alibaba/nacos
導(dǎo)入數(shù)據(jù)庫(kù)
創(chuàng)建mysql數(shù)據(jù)庫(kù)nacos,導(dǎo)入 conf/nacos-mysql.sql
配置數(shù)據(jù)庫(kù)
修改 conf/application.properties
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
配置啟動(dòng)模式
將nacos設(shè)為單機(jī)模式啟動(dòng),編輯 bin/startup.cmd 將MODE 修改為:
set MODE="standalone"
啟動(dòng)運(yùn)行
登陸頁(yè)面:http://localhost:8848/nacos/,登陸用戶nacos,登陸密碼為nacos
工程案例
工程案例源碼:https://github.com/java-aodeng/springcloud2020-demo-1
工程案例包括2個(gè),一個(gè)服務(wù)提供者provider 、服務(wù)消費(fèi)者consumer
Spring Boot 基礎(chǔ)就不介紹了,推薦下這個(gè)實(shí)戰(zhàn)教程:https://www.javastack.cn/categories/Spring-Boot/
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.4.4</spring-boot.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
<spring-cloud-alibaba.version>2020.0.RC1</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- spring boot 依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud 依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud alibaba 依賴 -->
<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>
服務(wù)提供者provider
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
server:
port: 8762
spring:
application:
name: provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
@RestController
public class DemoController {
@Value("${server.port}")
String port;
@GetMapping("getInfo")
public String getInfo(@RequestParam(value = "name",defaultValue = "nacosConfig",required = false)String name){
return "my name is "+name+",my port is "+port;
}
}
服務(wù)消費(fèi)者consumer
推薦一個(gè) Spring Boot 基礎(chǔ)教程及實(shí)戰(zhàn)示例:
https://www.javastack.cn/categories/Spring-Boot/
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--引入openfeign,必須要引入loadbalancer,否則無(wú)法啟動(dòng)-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
server:
port: 8763
spring:
application:
name: consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
在工程的啟動(dòng)入口開啟FeignClient的功能
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
寫一個(gè)FeignClient,去調(diào)用provider服務(wù)的接口:
@FeignClient(value = "provider")
public interface ProviderClient {
@GetMapping("getInfo")
String getInfo(@RequestParam(value = "name",defaultValue = "nacosConfig",required = false)String name);
}
寫一個(gè)接口,讓consumer去調(diào)用provider服務(wù)的接口:
@RestController
public class DemoController {
@Autowired
ProviderClient providerClient;
@GetMapping("getInfoByFeign")
public String getInfoByFeign(){
return providerClient.getInfo("consumer feign");
}
}
啟動(dòng)兩個(gè)工程,在nacos服務(wù)列表頁(yè)面出現(xiàn),consumer,provider2個(gè)服務(wù)表示都已經(jīng)注冊(cè)成功。
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
服務(wù)調(diào)用
在瀏覽器上輸入http://localhost:8763/getInfoByFeign,瀏覽器返回響應(yīng)
my name is consumer feign,my port is 8761
可見瀏覽器的請(qǐng)求成功調(diào)用了consumer服務(wù)的接口,consumer服務(wù)也成功地通過(guò)feign成功的調(diào)用了provider服務(wù)的接口。如果你還在到處找面試題,不如上這個(gè)Java面試庫(kù)面試小程序。另外,Spring Cloud 系列面試題和答案全部整理好了,微信搜索Java技術(shù)棧,在后臺(tái)發(fā)送:面試,可以在線閱讀。
使用sc loadbanlancer作為負(fù)載均衡
使用spring cloud loadbanlancer作為負(fù)載均衡器。通過(guò)修改provider的端口,再在本地啟動(dòng)一個(gè)新的provider服務(wù),那么本地有2個(gè)provider 服務(wù),端口分別為8761 和8762。在瀏覽器上多次調(diào)用http://localhost:8763/getInfoByFeign,瀏覽器會(huì)交替顯示:
my name is consumer feign,my port is 8761
my name is consumer feign,my port is 8762
注冊(cè)中心provider服務(wù)也會(huì)顯示兩個(gè)示例。Spring Boot 學(xué)習(xí)筆記分享給你學(xué)習(xí)下。
Spring Boot 實(shí)戰(zhàn)示例源碼:https://github.com/javastacks/spring-boot-best-practice
使用nacos作為配置中心
父工程添加nacos配置版本,另一個(gè)是用來(lái)解決最新版本導(dǎo)致的問(wèn)題:
<alibaba.nacos.version>2.0.3</alibaba.nacos.version>
<spring-cloud.bootstrap.version>3.0.4</spring-cloud.bootstrap.version>
<!--Alibaba Nacos 配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<!--引入這個(gè)依賴解決SpringCloud2020整合Nacos-Bootstrap配置不生效的問(wèn)題-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>${spring-cloud.bootstrap.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
在bootstrap.yml(一定是bootstrap.yml文件,不是application.yml文件)文件配置以下內(nèi)容:
server:
port: 8762
spring:
application:
name: provider
cloud:
nacos:
config:
enabled: true
server-addr: 127.0.0.1:8848
file-extension: yml
prefix: provider
profiles:
active: dev
${prefix}-${spring.profile.active}.${file-extension}
prefix 默認(rèn)為 spring.application.name 的值,也可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.prefix來(lái)配置。 spring.profile.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile,詳情可以參考 Spring Boot文檔。注意:當(dāng) spring.profile.active 為空時(shí),對(duì)應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 {file-extension} file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.file-extension 來(lái)配置。目前只支持 properties 和 yaml 類型。啟動(dòng)nacos,登陸localhost:8848/nacos,創(chuàng)建一個(gè)data id ,完整的配置如圖所示:

最后關(guān)注公眾號(hào)Java技術(shù)棧,在后臺(tái)回復(fù):面試,可以獲取我整理的 Java、Spring Cloud 系列面試題和答案,非常齊全。
源碼下載:
https://github.com/java-aodeng/springcloud2020-demo-1
https://spring.io/projects/spring-cloud
https://www.springcloud.cc/
https://blog.csdn.net/llllllllll4er5ty/article/details/104425284






關(guān)注Java技術(shù)??锤喔韶?/strong>


