SpringCloudAlibaba-入門操作

本文主要是預研Spring Cloud Alibaba技術。主要有Nacos、Disconvery、Config、Sentiel。

  • 參考資料
  1. SpringCloud官網
  2. Nacos中文文檔
  3. SpringCloudGateway
  • 技術框架
  1. SpringBoot-2.1.5.RELEASE
  2. SpringCloud-Greenwich.SR3
  3. SpringCloudAlibaba-2.1.0
  4. SpringCloudGateway-2.1.3
  • 源碼地址:https://github.com/CNXMBuyu/springclouddemo/tree/alibaba

Nacos

Nacos是阿里巴巴開源的一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。Nacos是單獨的一個應用程序。

點擊查看使用手冊

下載地址

  • 地址:GIT官網,下載偏慢百度網盤,提取碼: q75e
  • 解壓: unzip nacos-server-version.ziptarxvfnacosserverversion.zip 或者 tar -xvf 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);
    }
}

配置列表

Disconvery參數說明

配置說明

# 服務發現配置,參考: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 配置
## 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)

阿里雲短信服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章