Spring Cloud Alibab快速上手
點(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)贊支持下哈 
