1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Spring Cloud2020版本最佳實(shí)踐方案

        共 6019字,需瀏覽 13分鐘

         ·

        2021-10-17 12:40

        關(guān)注公眾號(hào)小哈學(xué)Java,回復(fù)”Java“獲取全網(wǎng)最火面試寶典

        來源:https://ilovey.live/2021/09/26/springcloud2020/


        Spring Cloud 從H版本之后命名方式改為2020.x.x,話說為毛最新版本不是2021命名,來自強(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ù)庫

        創(chuàng)建mysql數(shù)據(jù)庫nacos,導(dǎo)入 conf/nacos-mysql.sql

        配置數(shù)據(jù)庫

        修改 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)行

        登陸頁面:http://localhost:8848/nacos/,登陸用戶nacos,登陸密碼為nacos

        工程案例

        工程案例源碼:https://github.com/java-aodeng/springcloud2020-demo-1

        工程案例包括2個(gè),一個(gè)服務(wù)提供者provider 、服務(wù)消費(fèi)者consumer

        在父pom文件引入相關(guān)的依賴,如下:

        <properties>
        ????<java.version>1.8java.version>
        ????<spring-boot.version>2.4.4spring-boot.version>
        ????<spring-cloud.version>2020.0.2spring-cloud.version>
        ????<spring-cloud-alibaba.version>2021.1spring-cloud-alibaba.version>
        properties>

        <dependencyManagement>
        ????<dependencies>
        ????????
        ????????<dependency>
        ????????????<groupId>org.springframework.bootgroupId>
        ????????????<artifactId>spring-boot-dependenciesartifactId>
        ????????????<version>${spring-boot.version}version>
        ????????????<type>pomtype>
        ????????????<scope>importscope>
        ????????dependency>
        ????????
        ????????<dependency>
        ????????????<groupId>org.springframework.cloudgroupId>
        ????????????<artifactId>spring-cloud-dependenciesartifactId>
        ????????????<version>${spring-cloud.version}version>
        ????????????<type>pomtype>
        ????????????<scope>importscope>
        ????????dependency>
        ????????
        ????????<dependency>
        ????????????<groupId>com.alibaba.cloudgroupId>
        ????????????<artifactId>spring-cloud-alibaba-dependenciesartifactId>
        ????????????<version>${spring-cloud-alibaba.version}version>
        ????????????<type>pomtype>
        ????????????<scope>importscope>
        ????????dependency>
        ????dependencies>
        dependencyManagement>

        服務(wù)提供者provider

        在pom文件引入以下依賴:

        <dependency>
        ????<groupId>org.springframework.bootgroupId>
        ????<artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
        ????<groupId>com.alibaba.cloudgroupId>
        ????<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>

        配置文件:

        server:
        ??port:?8762

        spring:
        ??application:
        ????name:?provider

        ??cloud:
        ????nacos:
        ??????discovery:
        ????????server-addr:?127.0.0.1:8848

        啟動(dòng)入口添加注解:

        @SpringBootApplication
        @EnableDiscoveryClient
        public?class?ProviderApplication?{
        ????public?static?void?main(String[]?args)?{
        ????????SpringApplication.run(ProviderApplication.class,args);
        ????}
        }

        寫個(gè)接口:

        @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

        在pom文件引入以下依賴:

        <dependency>
        ????<groupId>org.springframework.bootgroupId>
        ????<artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
        ????<groupId>com.alibaba.cloudgroupId>
        ????<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>

        <dependency>
        ????<groupId>org.springframework.cloudgroupId>
        ????<artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>


        <dependency>
        ????<groupId>org.springframework.cloudgroupId>
        ????<artifactId>spring-cloud-starter-loadbalancerartifactId>
        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);
        }
        Copy

        寫一個(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ù)列表頁面出現(xiàn),consumer,provider2個(gè)服務(wù)表示都已經(jīng)注冊(cè)成功

        服務(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ù)也成功地通過feign成功的調(diào)用了provider服務(wù)的接口。

        使用sc loadbanlancer作為負(fù)載均衡

        使用spring cloud loadbanlancer作為負(fù)載均衡器。通過修改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è)示例

        使用nacos作為配置中心

        父工程添加nacos配置版本,另一個(gè)是用來解決最新版本導(dǎo)致的問題:

        <alibaba.nacos.version>2.0.3alibaba.nacos.version>
        <spring-cloud.bootstrap.version>3.0.4spring-cloud.bootstrap.version>

        ?
        <dependency>
        ????<groupId>com.alibaba.cloudgroupId>
        ????<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        ????<version>${spring-cloud-alibaba.version}version>
        dependency>

        <dependency>
        ????<groupId>org.springframework.cloudgroupId>
        ????<artifactId>spring-cloud-starter-bootstrapartifactId>
        ????<version>${spring-cloud.bootstrap.version}version>
        dependency>

        服務(wù)提供者provider添加依賴:

        <dependency>
        ????<groupId>com.alibaba.cloudgroupId>
        ????<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        dependency>

        <dependency>
        ????<groupId>org.springframework.cloudgroupId>
        ????<artifactId>spring-cloud-starter-bootstrapartifactId>
        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

        在上面的配置中,配置了nacos config server的地址,配置的擴(kuò)展名是ymal(目前僅支持yml和properties)。注意是沒有配置server.port的,sever.port的屬性在nacos中配置。上面的配置是和Nacos中的dataId 的格式是對(duì)應(yīng)的,nacos的完整格式如下:

        ${prefix}-${spring.profile.active}.${file-extension}
        • prefix 默認(rèn)為 spring.application.name 的值,也可以通過配置項(xiàng) spring.cloud.nacos.config.prefix來配置。
        • 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ù)格式,可以通過配置項(xiàng) spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型。啟動(dòng)nacos,登陸localhost:8848/nacos,創(chuàng)建一個(gè)data id ,完整的配置如圖所示:

        源碼下載:

        https://github.com/java-aodeng/springcloud2020-demo-1

        參考資料:

        https://www.fangzhipeng.com/spring-cloud.html https://spring.io/projects/spring-cloud https://www.springcloud.cc/ https://blog.csdn.net/llllllllll4er5ty/article/details/104425284

        1.?Guava RateLimiter 實(shí)現(xiàn) API 限流,這才是正確的姿勢(shì)!

        2.?圖解索引

        3.?阿里限流神器Sentinel奪命連環(huán) 17 問?

        4.?MySQL 用 limit 為什么會(huì)影響性能?

        最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

        獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

        文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

        謝謝支持喲 (*^__^*)

        瀏覽 81
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            最近最新中文字幕豆花 | 一区大宝贝 | 懂色av懂色av粉嫩av分享吧 | 国产一级视频免费观看 | 不知火舞撅起屁股求调教 | 丰满少妇诱人 | 五十路六十路在线精品 | 大鸡巴网站 | 国产亚洲精品久久久久动 | VA天堂网 |