本文主要是預研Spring Cloud Alibaba技術。主要有Nacos、Disconvery、Config、Sentiel。
- 參考資料
- 技術框架
- SpringBoot-2.1.5.RELEASE
- SpringCloud-Greenwich.SR3
- SpringCloudAlibaba-2.1.0
- SpringCloudGateway-2.1.3
- 源碼地址:https://github.com/CNXMBuyu/springclouddemo/tree/alibaba
Nacos
Nacos是阿里巴巴開源的一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。Nacos是單獨的一個應用程序。
下載地址
- 地址:GIT官網,下載偏慢;百度網盤,提取碼: q75e
- 解壓: unzip nacos-server-version.tar.gz
- 單例啓動:sh nacos/bin/startup.sh -m standalone
源碼打包
- GIT地址:https://github.com/alibaba/nacos.git
- 分支選擇:選擇tag-1.3.0
- maven打包命令:mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
- 解壓:distribution/target
- 單例啓動:sh nacos/bin/startup.sh -m standalone
默認用戶名/密碼:nacos/nacos
集羣搭建
配置
複製cluster.conf.example,改爲cluster.conf。集羣配置如下:
#it is ip
172.16.85.223:8846
172.16.85.223:8847
172.16.85.223:8848
啓動命令
sh startup.sh -p embedded
如果不加屬性-p embedded,則默認使用mysql作爲持久化數據庫
Discovery - 服務發現
使用步驟
// 1. pom.xml 添加依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
// 2. application.properties添加nacos地址,其它配置參考配置列表
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
// 3. 添加註解
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
配置列表
配置說明
# 服務發現配置,參考:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_more_information_about_nacos_discovery_starter_configurations
## 服務器地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
## 服務名稱,默認值:spring.application.name
#spring.cloud.nacos.discovery.service=provider
## 權重,取值範圍 1 到 100,數值越大,權重越大。默認:1
#spring.cloud.nacos.discovery.weight=80
## 網卡名稱,當多網卡時,注意選擇。默認:取第一張網卡
#spring.cloud.nacos.discovery.network-interface=
## IP地址,如果沒有配置,默認根據網卡選擇IP
#spring.cloud.nacos.discovery.ip
## 端口,默認值:server.port
#spring.cloud.nacos.discovery.port
## 一個典型的場景是隔離針對不同環境的服務註冊,例如測試和生產環境之間的資源(配置、服務等)隔離
#spring.cloud.nacos.discovery.namespace=dev
## 阿里雲的賬號
#spring.cloud.nacos.discovery.access-key=access
## 阿里雲的密碼
#spring.cloud.nacos.discovery.secret-key=secret
## 用於存儲信息
#spring.cloud.nacos.discovery.metadata.username=user
#spring.cloud.nacos.discovery.metadata.password=password
## 日誌文件名稱
#spring.cloud.nacos.discovery.log-name=
## 集羣名稱,默認值:DEFAULT
#spring.cloud.nacos.discovery.cluster-name=
## 地域的某個服務的入口域名,通過此域名可以動態地拿到服務端地址
#spring.cloud.nacos.discovery.endpoint=
## 集成ribbon,默認是true
#ribbon.nacos.enabled=true
##
#spring.cloud.nacos.discovery.watch.enabled=true
特性/原理
默認集成了Ribbon,可以使用RestTemplate和FeignClient
服務註冊
Discovery遵循了spring cloud common標準,實現了AutoServiceRegistration、ServiceRegistry、Registration 這三個接口。
在spring cloud應用的啓動階段,監聽了WebServerInitializedEvent事件,當Web容器初始化完成後,即收到WebServerInitializedEvent事件後,會觸發註冊的動作,調用ServiceRegistry的register方法,將服務註冊到Nacos Server。
服務發現
NacosServerList實現了com.netflix.loadbalancer.ServerList接口,並在@ConditionOnMissingBean的條件下進行自動注入,默認集成了Ribbon。
如果需要有更加自定義的可以使用 @Autowired注入一個NacosRegistration實例,通過其持有的NamingService字段內容直接調用 Nacos API。
信息查詢
http://localhost:8001/actuator/nacos-discovery
Config - 配置中心
SpingCloudAlibaba的config沒有服務端,直接在nacos的配置管理中添加配置即可。
使用步驟
// 1. pom添加依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
// 2. 添加bootstrap.properties配置,其它配置參考配置列表
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
配置列表
配置說明
# config 配置
## config服務端地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
## 配置文件格式:${prefix}-${spring.profiles.active}.${file-extension}。例如:provider-dev.properties
spring.cloud.nacos.config.prefix=provider
## 配置的編碼,默認UTF-8
#spring.cloud.nacos.config.encode
## 默認DEFAULT_GROUP
#spring.cloud.nacos.config.group
## 默認類型:properties
#spring.cloud.nacos.config.fileExtension=properties
## 獲取配置的超時時間,默認3000ms
#spring.cloud.nacos.config.timeout=3000
## 通過此域名可以動態地拿到服務端地址
#spring.cloud.nacos.config.endpoint
## 一個典型的場景是隔離針對不同環境的服務註冊,例如測試和生產環境之間的資源(配置、服務等)隔離
#spring.cloud.nacos.config.namespace
## 阿里雲的賬號
#spring.cloud.nacos.config.accessKey
## 阿里雲的密碼
#spring.cloud.nacos.config.secretKey
## 服務端 API 的相對路徑
#spring.cloud.nacos.config.contextPath
## 集羣名稱
#spring.cloud.nacos.config.clusterName
##
#spring.cloud.nacos.config.sharedDataids
##
#spring.cloud.nacos.config.refreshableDataids
##
#spring.cloud.nacos.config.extConfig
特性/原理
Nacos Config數據結構
Nacos Config主要通過dataId和group來唯一確定一條配置,我們假定你已經瞭解此背景。
Nacos Client從Nacos Server端獲取數據時,調用的是此接口ConfigService.getConfig(String dataId, String group, long timeoutMs)。
自動注入
Nacos Config Starter實現了org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,並將優先級設置成了最高。
在Spring Cloud應用啓動階段,會主動從Nacos Server端獲取對應的數據,並將獲取到的數據轉換成PropertySource且注入到Environment的PropertySources 屬性中,所以使用 @Value 註解也能直接獲取Nacos Server端配置的內容。
動態刷新
Nacos Config Starter默認爲所有獲取數據成功的Nacos的配置項添加了監聽功能,在監聽到服務端配置發生變化時會實時觸發org.springframework.cloud.context.refresh.ContextRefresher的refresh方法 。
如果需要對Bean進行動態刷新,請參照Spring和Spring Cloud規範。推薦給類添加@RefreshScope或@ConfigurationProperties 註解,更多詳情請參考 ContextRefresher Java Doc。
信息查詢
http://127.0.0.1:8001/actuator/nacos-config
Gateway - 網關 - 預計20200706更新
Gateway並不屬於SpringCloudAlibaba的一個組件。
https://github.com/spring-cloud/spring-cloud-gateway/blob/v2.1.3.RELEASE/spring-cloud-gateway-sample/pom.xml
Sentinel - 熔斷器+ - 預計20200706更新
Sentinel是阿里巴巴開源的分佈式系統的流量防衛組件,Sentinel把流量作爲切入點,從流量控制,熔斷降級,系統負載保護等多個維度保護服務的穩定性。
example:https://github.com/alibaba/spring-cloud-alibaba/tree/v2.1.0.RELEASE/spring-cloud-alibaba-examples/sentinel-example
Dubbo
略過
RocketMQ
ANS(Application Naming Service)
阿里雲EDAS的組件,提供商業版的服務註冊功能。EDAS介紹
ACM(Application Configuration Management)
阿里雲的應用配置管理。ACM介紹
OSS(Object Storage Service)
阿里雲的對象存儲。OSS介紹
SchedulerX
阿里雲EDAS的組件,提供符合Spring Cloud規範的分佈式作業調度。EDAS介紹
SMS(Short Message Service)
阿里雲短信服務