<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Cloud Alibab快速上手

          共 19053字,需瀏覽 39分鐘

           ·

          2021-04-10 10:49

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          一、Spring Cloud Alibaba簡介

          1.1 什么是Spring Cloud Alibaba?

          Spring Cloud Alibaba 是阿里提供的微服務(wù)開發(fā)一站式解決方案,是阿里巴巴開源中間件與 Spring Cloud 體系的融合。馬老師左手雙十一,右手阿里開源組件,不僅占據(jù)了程序員的購物車,還要攻占大家的開發(fā)工具。


          同 Spring Cloud 一樣,Spring Cloud Alibaba 也是一套微服務(wù)解決方案,包含開發(fā)分布式應(yīng)用微服務(wù)的必需組件,方便開發(fā)者通過 Spring Cloud 編程模型輕松使用這些組件來開發(fā)分布式系統(tǒng)。


          依托 Spring Cloud Alibaba,需要添加一些注解和少量配置,就可以將 Spring Cloud 應(yīng)用接入阿里分布式應(yīng)用解決方案,通過阿里中間件來迅速搭建分布式應(yīng)用系統(tǒng)。


          官方文檔地址:

          https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md


          1.2 主要模塊

          • 服務(wù)注冊(cè)和發(fā)現(xiàn):實(shí)例可以在Nacos中注冊(cè),客戶可以使用Spring管理的bean發(fā)現(xiàn)實(shí)例。支持通過Spring Cloud Netflix的客戶端負(fù)載均衡器Ribbon。

          • 流量控制和服務(wù)降級(jí):使用Sentinel進(jìn)行流量控制,斷路和系統(tǒng)自適應(yīng)保護(hù)。

          • 分布式配置中心:使用Nacos作為數(shù)據(jù)存儲(chǔ)

          • 消息總線:使用Spring Cloud Bus RocketMQ鏈接分布式系統(tǒng)的節(jié)點(diǎn)

          • Dubbo RPC:通過Dubbo RPC擴(kuò)展Spring Cloud服務(wù)到服務(wù)調(diào)用的通信協(xié)議

          • 分布式事務(wù):支持高性能且易于使用的Seata分布式事務(wù)解決方案

          • 阿里云對(duì)象存儲(chǔ):OSS的Spring資源抽象。阿里云對(duì)象存儲(chǔ)服務(wù)(OSS)是一種加密,安全,經(jīng)濟(jì)高效且易于使用的對(duì)象存儲(chǔ)服務(wù),可讓您在云中存儲(chǔ),備份和存檔大量數(shù)據(jù)

          • 阿里云短信服務(wù):覆蓋全球的短信服務(wù),友好、高效、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達(dá)通道。

          1.3 模塊對(duì)應(yīng)組件

          1、阿里開源組件

          • Nacos:一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。

          • Sentinel:把流量作為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性。

          • RocketMQ:開源的分布式消息系統(tǒng),基于高可用分布式集群技術(shù),提供低延時(shí)的、高可靠的消息發(fā)布與訂閱服務(wù)。

          • Dubbo:這個(gè)就不用多說了,在國內(nèi)應(yīng)用非常廣泛的一款高性能 Java RPC 框架。

          • Seata:阿里巴巴開源產(chǎn)品,一個(gè)易于使用的高性能微服務(wù)分布式事務(wù)解決方案。

          • Arthas:開源的Java動(dòng)態(tài)追蹤工具,基于字節(jié)碼增強(qiáng)技術(shù),功能非常強(qiáng)大。

          2、阿里商業(yè)化組件

          作為一家商業(yè)公司,阿里巴巴推出 Spring Cloud Alibaba,很大程度上市希望通過搶占開發(fā)者生態(tài),來幫助推廣自家的云產(chǎn)品。所以在開源社區(qū),夾帶了不少私貨,這部分組件整體易用性和穩(wěn)定性還是很高的。

          • Alibaba Cloud ACM:一款在分布式架構(gòu)環(huán)境中對(duì)應(yīng)用配置進(jìn)行集中管理和推送的應(yīng)用配置中心產(chǎn)品。

          • Alibaba Cloud OSS:阿里云對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,簡稱 OSS),是阿里云提供的云存儲(chǔ)服務(wù)。

          • Alibaba Cloud SchedulerX:阿里中間件團(tuán)隊(duì)開發(fā)的一款分布式任務(wù)調(diào)度產(chǎn)品,提供秒級(jí)、精準(zhǔn)的定時(shí)(基于 Cron 表達(dá)式)任務(wù)調(diào)度服務(wù)。

          • Alibaba Cloud SMS: 覆蓋全球的短信服務(wù),友好、高效、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達(dá)通道。

          3、集成 Spring Cloud 組件

          Spring Cloud Alibaba 作為整套的微服務(wù)解決組件,只依靠目前阿里的開源組件是不夠的,更多的是集成當(dāng)前的社區(qū)組件,所以 Spring Cloud Alibaba 可以集成 Zuul,OpenFeign等網(wǎng)關(guān),也支持 Spring Cloud Stream 消息組件。


          1.4 與Spring版本對(duì)應(yīng)關(guān)系

          我們統(tǒng)一使用 2.1版本的與前面的springcloud對(duì)應(yīng)


          二、注冊(cè)中心+配置中心Nacos

          2.1 什么是Nacos?

          Nacos誕生于2019年

          一句話概括:它既是 注冊(cè)中心 也是 配置中心,也就是類似Eureka+config的微服務(wù)管理平臺(tái)!

          Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡單易用的特性集,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。


          使用 Nacos 簡化服務(wù)發(fā)現(xiàn)、配置管理、服務(wù)治理及管理的解決方案,讓微服務(wù)的發(fā)現(xiàn)、管理、共享、組合更加容易。


          官網(wǎng)地址:https://nacos.io/zh-cn/docs/what-is-nacos.html


          2.2 Nacos的安裝啟動(dòng)

          2.2.1. 環(huán)境要求

          Nacos 依賴 Java 環(huán)境來運(yùn)行。請(qǐng)確保是在以下版本環(huán)境中安裝使用:

          1、支持 Linux/Unix/Mac/Windows,64 位操作系統(tǒng)

          2、支持JDK 1.8及以上,64 位版本;

          3、Maven必須是3.2.x及以上版本;

          2.2.2. 下載地址

          https://github.com/alibaba/nacos/releases

          2.2.3. 啟動(dòng)Nacos服務(wù)

          啟動(dòng)命令:或者雙擊startup.cmd運(yùn)行文件,(如果cmd窗口閃一下就沒有了,請(qǐng)檢查JAVA_HOME)。

          startup.cmd

          啟動(dòng)成功如下圖:


          2.2.4. 訪問Nacos服務(wù)

          瀏覽器訪問http://localhost:8848/nacos/


          輸入默認(rèn)用戶名:nacos 密碼:nacos


          登陸成功界面如下


          2.2.5. Nacos關(guān)閉

          關(guān)閉命令:或者雙擊shutdown.cmd運(yùn)行文件。

          shutdown.cmd


          2.3. 注冊(cè)中心使用

          1、在pom.xml中,添加SpringCloud和Nacos相關(guān)依賴

             <!--版本號(hào)配置定義-->
             <properties>
                 <java.version>1.8</java.version>
                 <!--SpringCloud阿里巴巴版本-->
                 <spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
                 <!--SpringCloud版本-->
                 <spring.cloud.version>Greenwich.SR4</spring.cloud.version>
             </properties>
             <dependencies>
                 <!-- 省略部分坐標(biāo)... -->
                 <!--nacos注冊(cè)中心-->
                 <dependency>
                     <groupId>com.alibaba.cloud</groupId>
                     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                 </dependency>
             </dependencies>
             <!--BOM 依賴管理清單列表-->
             <dependencyManagement>
                 <dependencies>
                     <!--SpringCloud的所有依賴坐標(biāo)清單-->
                     <dependency>
                         <groupId>org.springframework.cloud</groupId>
                         <artifactId>spring-cloud-dependencies</artifactId>
                         <version>${spring.cloud.version}</version>
                         <type>pom</type>
                         <scope>import</scope>
                     </dependency>
                     <!--Alibaba的相關(guān)所有依賴坐標(biāo)清單-->
                     <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>

          2、配置Nacos注冊(cè)中心地址,提供者、消費(fèi)者都配

             #注冊(cè)到nacos注冊(cè)中心
             spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

          3、啟動(dòng)引導(dǎo)類中添加@EnableDiscoveryClient注解,提供者、消費(fèi)者都加

             @SpringBootApplication
             @EnableDiscoveryClient//開啟注冊(cè)中心客戶端
             public class UserServiceApplication {
                 public static void main(String[] args) {
                     SpringApplication.run(UserServiceApplication.class, args);
                 }
             }

          4、消費(fèi)者服務(wù)中,配置開啟負(fù)載均衡,加@LoadBanlancer注解。 

             @SpringBootApplication
             @EnableDiscoveryClient//開啟注冊(cè)中心客戶端
             public class ConsumerServiceApplication {
                 public static void main(String[] args) {
                     SpringApplication.run(ConsumerServiceApplication.class, args);
                 }
                 //配置RestTemplate對(duì)象,注入Spring容器
                 @Bean
                 @LoadBalanced//開啟負(fù)載均衡器
                 public RestTemplate restTemplate(){
                     return new RestTemplate();
                 }
             }

          5、將訪問地址改為服務(wù)名稱

             @Service
             public class UserServiceImpl implements UserService {
                 @Autowired
                 private RestTemplate restTemplate;
                 @Override
                 public User findUserByIdWithUserService(Integer id) {
                     // 使用ribbon負(fù)載均衡器,同時(shí)配置了注冊(cè)中心
                     // 才可以使用服務(wù)名稱訪問對(duì)應(yīng)服務(wù)
                     String url = "http://user-service/user/findById/" + id;
                     User user = restTemplate.getForObject(url, User.class);
                     return user;
                 }
             }

          6、查看nacos管控臺(tái)服務(wù)列表,測(cè)試服務(wù)負(fù)載均衡訪問效果


          2.4、配置中心使用

          2.4.1、目標(biāo):

          將提供者服務(wù)的配置文件,提取到nacos配置中心中管理


          2.4.2、實(shí)現(xiàn)步驟:

          (1)在Nacos管控臺(tái)的配置管理中,添加提供者服務(wù)配置文件

          (2)在pom.xml中,添加Nacos配置中心依賴坐標(biāo)

          (3)刪除application.properties配置文件,使用bootstrap.properties配置文件

          (4)bootstrap.properties配置文件中,添加Nacos配置中心地址

          (5)啟動(dòng)服務(wù)測(cè)試訪問


          2.4.3、實(shí)現(xiàn)過程:

          1、在Nacos管控臺(tái)的配置管理中,添加提供者服務(wù)配置文件


          在pom.xml中,添加Nacos配置中心依賴坐標(biāo)

          <!--nacos配置中心依賴-->
          <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
          </dependency>

          2、刪除application.properties配置文件,使用bootstrap.properties配置文件

          3、bootstrap.properties配置文件中,添加Nacos配置中心地址

          #配置中心地址
          spring.cloud.nacos.config.server-addr=127.0.0.1:8848

          #指定配置中心的文件格式,默認(rèn)properties,如果使用yml需顯示聲明
          #spring.cloud.nacos.config.file-extension=yml

          4、啟動(dòng)服務(wù)測(cè)試訪問

          注意:

          • Data-ID名稱一旦填寫發(fā)布不可修改

          • Data-ID中,應(yīng)用名稱要與對(duì)應(yīng)服務(wù)應(yīng)用名稱一致:{應(yīng)用名稱}-{環(huán)境名稱}.properties

          • Data-ID中,環(huán)境名稱可以不寫

          • 默認(rèn)加載properties格式配置文件,如果使用yml格式,則需要在配置文件中聲明文件格式。

          擴(kuò)展1:配置自動(dòng)刷新

          提供者服務(wù),配置信息無法自動(dòng)刷新配置


          可添加personName=肖戰(zhàn) ,在controller中獲取進(jìn)行測(cè)試。


          解決辦法:

          1、需要刷新的controller上添加@RefreshScope

             @RestController
             @RequestMapping("user")
             @RefreshScope//自動(dòng)刷新配置
             public class UserController {
                 @Autowired
                 private UserService userService;
             
                 @Value("${server.port}")
                 private String port;
                 //獲取配置文件中personName
                 @Value("${personName}")
                 private String name;
             
                 @RequestMapping("/findById/{id}")
                 public User findById(@PathVariable("id") Integer id){
                     User user = userService.findById(id);
                     //設(shè)置端口信息,設(shè)置PersonName
                     user.setNote("端口 : "+port+" ; personName :"+name);
                     return user;
                 }
             }


          2、修改配置,再次測(cè)試

          注意:無需第三方消息隊(duì)列中間件


          擴(kuò)展2:多環(huán)境配置使用

          1. 方式一:文件名稱命名

          我們?cè)贜acos界面新建配置時(shí)可以通過文件名來區(qū)分環(huán)境,當(dāng)多環(huán)境時(shí)可以將名稱填寫為:user-service-dev.properties,但是需要在生產(chǎn)者的配置文件中聲明:spring.profiles.active=dev


          nacos配置文件:

          bootstrap.properties:

          #指定配置文件環(huán)境
          spring.profiles.active=dev


          2. 方式二:Group分組

          除了使用配置文件命名方式,我們還可以使用group分組的方式來實(shí)現(xiàn)相同效果。


          新建配置文件時(shí),默認(rèn)是DEFAULT_GROUP。


          我們可以通過設(shè)置不同的group和在bootstrap.prperties中指定分組來區(qū)別不同的環(huán)境。


          nacos配置文件:

          bootstrap.properties:

          #指定配置中心分組
          spring.cloud.nacos.config.group=PROD_GROUP


          三、流量防衛(wèi)兵Sentinel

          3.1 Sentinel簡介

          Sentinel: 分布式系統(tǒng)的流量防衛(wèi)兵


          隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式服務(wù)架構(gòu)的輕量級(jí)流量控制組件,主要以流量為切入點(diǎn),從限流、流量整形、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度來幫助您保障微服務(wù)的穩(wěn)定性。

          • 2012 年,Sentinel 誕生,主要功能為入口流量控制。

          • 2013-2017 年,Sentinel 在阿里巴巴集團(tuán)內(nèi)部迅速發(fā)展,成為基礎(chǔ)技術(shù)模塊,覆蓋了所有的核心場(chǎng)景。Sentinel 也因此積累了大量的流量歸整場(chǎng)景以及生產(chǎn)實(shí)踐。

          • 2018 年,Sentinel 開源,并持續(xù)演進(jìn)。

          1、主要特征

          • 豐富的應(yīng)用場(chǎng)景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場(chǎng)景,例如秒殺(即突發(fā)流量控制在系統(tǒng)容量可以承受的范圍)、消息削峰填谷、集群流量控制、實(shí)時(shí)熔斷下游不可用應(yīng)用等。

          • 完備的實(shí)時(shí)監(jiān)控:Sentinel 同時(shí)提供實(shí)時(shí)的監(jiān)控功能。您可以在控制臺(tái)中看到接入應(yīng)用的單臺(tái)機(jī)器秒級(jí)數(shù)據(jù),甚至 500 臺(tái)以下規(guī)模的集群的匯總運(yùn)行情況。

          • 廣泛的開源生態(tài):Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應(yīng)的依賴并進(jìn)行簡單的配置即可快速地接入 Sentinel。

          • 完善的 SPI 擴(kuò)展點(diǎn):Sentinel 提供簡單易用、完善的 SPI 擴(kuò)展接口。您可以通過實(shí)現(xiàn)擴(kuò)展接口來快速地定制邏輯。例如定制規(guī)則管理、適配動(dòng)態(tài)數(shù)據(jù)源等。

          Sentinel 的主要特性:

          2、Sentinel 分為兩個(gè)部分:

          • 核心庫(Java 客戶端)不依賴任何框架/庫,能夠運(yùn)行于所有 Java 運(yùn)行時(shí)環(huán)境,同時(shí)對(duì) Dubbo / Spring Cloud 等框架也有較好的支持。

          • 控制臺(tái)(Dashboard)基于 Spring Boot 開發(fā),打包后可以直接運(yùn)行,不需要額外的 Tomcat 等應(yīng)用容器。

          3.2 Sentinel控制臺(tái)安裝

          1、下載jar

          https://github.com/alibaba/Sentinel/releases


          2、啟動(dòng):

          java -jar 啟動(dòng) 默認(rèn)端口8080,可以通過 -Dserver.port=8086 來修改

          # 第一種
          java -jar -Dserver.port=8086 sentinel-dashboard-1.6.3.jar
          # 第二種
          java -jar sentinel-dashboard-1.6.3.jar --server.port=8086


          3、訪問測(cè)試:

          http://127.0.0.1:8086 默認(rèn)賬密:sentinel/sentinel


          3.3 服務(wù)集成Sentinel

          **目標(biāo):**提供者服務(wù)和消費(fèi)者服務(wù),集成至Sentinel

          實(shí)現(xiàn)步驟:

          1、在pom.xml添加sentinel依賴坐標(biāo)

          2、配置文件添加sentinel地址

          3、必須訪問服務(wù)接口,

          http://localhost:9091/user/findById/1,http://localhost:8081/consumer/1

          4、然后在http://127.0.0.1:8086,sentinel中才能看到對(duì)應(yīng)服務(wù)

          實(shí)現(xiàn)過程:

          1、在pom添加sentinel依賴

             <!--sentinel客戶端依賴-->
             <dependency>
                 <groupId>com.alibaba.cloud</groupId>
                 <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
             </dependency>

          2、生產(chǎn)者配置文件添加sentinel地址

           #sentinel注冊(cè)地址
           spring.cloud.sentinel.transport.dashboard=127.0.0.1:8086
           #服務(wù)接收sentinel的配置端口
           spring.cloud.sentinel.transport.port=8719

          3、訪問服務(wù)接口

          http://localhost:9091/user/findById/1,http://localhost:8081/consumer/1


          4、然后在http://127.0.0.1:8086,sentinel中才能看到對(duì)應(yīng)服務(wù)


          3.4 演示:服務(wù)降級(jí)和限流

          **目標(biāo):**消費(fèi)者服務(wù)降級(jí)和限流效果演示

          實(shí)現(xiàn)步驟:

          1、在消費(fèi)者服務(wù)中,添加服務(wù)降級(jí)和限流處理方法

          2、在sentinel控制臺(tái)中,添加服務(wù)降級(jí)配置

          3、測(cè)試服務(wù)降級(jí)

          4、在sentinel控制臺(tái)中,添加服務(wù)限流配置

          5、測(cè)試服務(wù)限流

          實(shí)現(xiàn)過程:

          1、在消費(fèi)者服務(wù)中,添加服務(wù)降級(jí)和限流處理方法

             @Service
             public class UserServiceImpl implements UserService {
                 @Autowired
                 private RestTemplate restTemplate;
                 /**
                  * @SentinelResource 注解作用:設(shè)置服務(wù)降級(jí)處理方法和服務(wù)限流處理方法
                  * value屬性 設(shè)置被降級(jí)或限流方法
                  * fallback屬性 設(shè)置服務(wù)降級(jí)處理方法
                  * blockHandler屬性 設(shè)置服務(wù)限流處理方法
                  */
                 @Override
                 @SentinelResource(value = "findUserByIdWithUserService",fallback = "fallbackMethod",blockHandler = "blockMethod")
                 public User findUserByIdWithUserService(Integer id) {
                     // 使用ribbon負(fù)載均衡器,同時(shí)配置了注冊(cè)中心
                     // 才可以使用服務(wù)名稱訪問對(duì)應(yīng)服務(wù)
                     String url = "http://user-service:9091/user/findById/" + id;
                     User user = restTemplate.getForObject(url, User.class);
                     return user;
                 }
                 //創(chuàng)建服務(wù)降級(jí)方法,與被降級(jí)方法返回值保持一致,參數(shù)保持一致
                 public User fallbackMethod(Integer id) {
                     User user = new User();
                     user.setNote("服務(wù)降級(jí)處理了~");
                     return user;
                 }
                 //創(chuàng)建服務(wù)限流方法,與被降級(jí)方法返回值保持一致,參數(shù)保持一致,除了參數(shù)保持一致,還需要加一個(gè)參數(shù)blockexception
                 public User blockMethod(Integer id) {
                     User user = new User();
                     user.setNote("服務(wù)限流處理了~");
                     return user;
                 }
             }

          2、在sentinel控制臺(tái)中,添加服務(wù)降級(jí)配置


          3、測(cè)試服務(wù)降級(jí)

          4、在sentinel控制臺(tái)中,添加服務(wù)限流配置

          5、測(cè)試服務(wù)限流

          注意:

          • 服務(wù)降級(jí)處理方法,返回值與參數(shù)必須與被降級(jí)方法保持一致

          • 服務(wù)限流處理方法,返回值與參數(shù)必須與被降級(jí)方法保持一致,參數(shù)除保留原來之外,還需添加BlockException參數(shù)。

          • 服務(wù)降級(jí)設(shè)置資源:findUserByIdWithUserService

          • 服務(wù)降級(jí)設(shè)置資源:findUserByIdWithUserService,/consumer/1


          四、配置中心Apollo

          隨著程序功能的日益復(fù)雜,程序的配置日益增多:各種功能的開關(guān)、參數(shù)的配置、服務(wù)器的地址……


          對(duì)程序配置的期望值也越來越高:配置修改后實(shí)時(shí)生效,灰度發(fā)布,分環(huán)境、分集群管理配置,完善的權(quán)限、審核機(jī)制……


          在這樣的大環(huán)境下,傳統(tǒng)的通過配置文件、數(shù)據(jù)庫等方式已經(jīng)越來越無法滿足開發(fā)人員對(duì)配置管理的需求。


          Apollo配置中心應(yīng)運(yùn)而生!


          4.1 Apollo簡介

          Apollo(阿波羅)是攜程框架部門研發(fā)的配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景。


          服務(wù)端基于Spring Boot和Spring Cloud開發(fā),打包后可以直接運(yùn)行,不需要額外安裝Tomcat等應(yīng)用容器。


          Java客戶端不依賴任何框架,能夠運(yùn)行于所有Java運(yùn)行時(shí)環(huán)境,同時(shí)對(duì)Spring/Spring Boot環(huán)境也有較好的支持。


          項(xiàng)目地址:https://github.com/ctripcorp/apollo


          Apollo支持4個(gè)維度管理Key-Value格式的配置:

          1、application (應(yīng)用)

          2、environment (環(huán)境)

          3、cluster (集群)

          4、namespace (命名空間)

          基礎(chǔ)模型圖:

          1、用戶在配置中心對(duì)配置進(jìn)行修改并發(fā)布

          2、配置中心通知Apollo客戶端有配置更新

          3、Apollo客戶端從配置中心拉取最新的配置、更新本地配置并通知到應(yīng)用

          4.2 Apollo安裝啟動(dòng)

          環(huán)境要求:

          • Jdk1.8+

          • MySQL5.6.5+,版本不對(duì),使用docker快速安裝mysql!


          1. 下載Apollo安裝包

          下載地址:https://github.com/nobodyiam/apollo-build-scripts

          2. 啟動(dòng)配置中心Apollo服務(wù)

          啟動(dòng)步驟:

          1、解壓安裝包,找到服務(wù)數(shù)據(jù)庫SQL文件

          (1)apolloportaldb.sql (管理臺(tái)sql)

          (2)apolloconfigdb.sql(配置中心sql)

          2、修改啟動(dòng)腳本demo.sh,配置腳本中連接mysql數(shù)據(jù)庫賬戶密碼

          (1)默認(rèn)本地可以不改!

          3、執(zhí)行啟動(dòng)命令,注意:使用Git Bash命令窗口啟動(dòng)

          (1)啟動(dòng)3個(gè)服務(wù)端口,8080【注冊(cè)中心Eureka】,8070【門戶站點(diǎn)】,8090【管理服務(wù)】

          4、啟動(dòng)成功結(jié)果,然后訪問http://localhost:8070/進(jìn)行測(cè)試

          啟動(dòng)過程:

          1、解壓安裝包,找到服務(wù)數(shù)據(jù)庫SQL文件

          (1)apolloportaldb.sql (管理臺(tái)sql)

          (2)apolloconfigdb.sql(配置中心sql)

          2、修改啟動(dòng)腳本demo.sh,配置腳本中連接mysql數(shù)據(jù)庫賬戶密碼

          #apollo config db info
          apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
          apollo_config_db_username=用戶名
          apollo_config_db_password=密碼(如果沒有密碼,留空即可)

          # apollo portal db info
          apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
          apollo_portal_db_username=用戶名
          apollo_portal_db_password=密碼(如果沒有密碼,留空即可)

          3、執(zhí)行啟動(dòng)命令,注意:使用Git Bash命令窗口啟動(dòng)

          #分別使用8070, 8080, 8090端口,請(qǐng)確保這3個(gè)端口當(dāng)前沒有被使用。
          #啟動(dòng)命令
          ./demo.sh start
          #停止命令
          ./demo.sh stop

          4、啟動(dòng)成功結(jié)果:當(dāng)看到如下圖時(shí),即可訪問8070端口

          5、進(jìn)入登錄界面http://localhost:8070/,輸入默認(rèn)賬密:apollo/admin


          4.3Apollo詳解

          1. 服務(wù)端設(shè)計(jì)

          (1)用戶在Portal【門戶站點(diǎn)】操作配置發(fā)布

          (2)Portal【門戶站點(diǎn)】調(diào)用Admin Service【管理服務(wù)】的接口操作發(fā)布

          (3)Admin Service【管理服務(wù)】發(fā)布配置后,發(fā)送消息給各個(gè)Config Service【配置中心服務(wù)】

          (4)Config Service【配置中心服務(wù)】收到消息后,通知對(duì)應(yīng)的客戶端

          2. 客戶端設(shè)計(jì)

          上圖簡要描述了Apollo客戶端的實(shí)現(xiàn)原理:

          1、客戶端和服務(wù)端保持了一個(gè)長連接,從而能第一時(shí)間獲得配置更新的推送。(通過Http Long Polling實(shí)現(xiàn))

          2、客戶端還會(huì)定時(shí)從Apollo配置中心服務(wù)端拉取應(yīng)用的最新配置。

          (1)這是一個(gè)fallback【兜底】機(jī)制,為了防止推送機(jī)制失效導(dǎo)致配置不更新

          (2)客戶端定時(shí)拉取會(huì)上報(bào)本地版本,所以一般情況下,對(duì)于定時(shí)拉取的操作,服務(wù)端都會(huì)返回304 - Not Modified

          (3)定時(shí)頻率默認(rèn)為每5分鐘拉取一次,可以修改:apollo.refreshInterval,單位分鐘!

          3、客戶端從Apollo配置中心服務(wù)端獲取到應(yīng)用的最新配置后,會(huì)保存在內(nèi)存中

          4、客戶端會(huì)把從服務(wù)端獲取到的配置在本地文件系統(tǒng)緩存一份

          (1)在遇到服務(wù)不可用,或網(wǎng)絡(luò)不通的時(shí)候,依然能從本地恢復(fù)配置

          5、應(yīng)用程序可以從Apollo客戶端獲取最新的配置、訂閱配置更新通知


          4.4 配置中心比較:


          ————————————————

          版權(quán)聲明:本文為CSDN博主「用生命研發(fā)技術(shù)」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

          原文鏈接:

          https://blog.csdn.net/qq_37242720/article/details/115125033





          粉絲福利:Java從入門到入土學(xué)習(xí)路線圖

          ??????

          ??長按上方微信二維碼 2 秒


          感謝點(diǎn)贊支持下哈 

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看一级黄 | 内射麻豆 | 欧美亚洲成人视频 | 亚洲黄色免费 | 自拍视频在线81 |