Spring Cloud Alibaba---服務註冊、發現、管理中心Nacos
Spring Cloud
存在 Spring Cloud1.x和Spring Cloud2.x
版本,目前主流使用2.x版本,因為服務註冊元件 eureka
的停止維護,所以目前很多公司都開始使用其他的替代方案,而阿里系的 Spring-Cloud-Alibaba
成了微服務生態一個主流解決方案。目前我所在公司也準備使用阿里這套方案進行微服務開發。本文主要介紹服務註冊中心 nacos
的使用入門
概念
什麼是Nacos?
Nacos
致力於幫助您發現、配置和管理微服務。 Nacos
提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元資料及流量管理。
Nacos
主要特性(目前我使用到的):
- 服務發現和服務健康監測
Nacos 支援基於 DNS 和基於 RPC 的服務發現。服務提供者使用 原生SDK、OpenAPI、或一個獨立的Agent TODO註冊 Service 後,服務消費者可以使用DNS TODO 或HTTP&API查詢和發現服務。
Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務例項傳送請求 。Nacos 支援傳輸層 (PING 或 TCP)和應用層 (如 HTTP、MySQL、使用者自定義)的健康檢查。 對於複雜的雲環境和網路拓撲環境中(如 VPC、邊緣網路等)服務的健康檢查,Nacos 提供了 agent 上報模式和服務端主動檢測2種健康檢查模式。Nacos 還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量 - 動態配置服務
Nacos提供對服務的動態配置,即支援動態修改服務配置檔案application.yml
中的屬性,利用此特性我們可以動態配置Spring Cloud Gateway動態路由。
快速安裝
- 安裝執行Nacos
安裝教程檢視nacos官網,推薦使用編譯後壓縮包安裝方式,自己編譯可能報錯。
安裝以後執行或關閉軟體:
Windows直接執行startup.cmd
、shutdown.cmd
linux中執行指令碼sh startup.sh -m standalone
、sh shutdown.sh
- 檢測安裝
訪問http://ip:port/nacos
,開啟nacos
後臺主頁說明安裝成功
整合Spring Cloud生態
-
啟動服務發現
服務註冊實現:新建專案provider,新增依賴
spring-cloud-starter-alibaba-nacos-discovery
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 複製程式碼
在啟動類加上註解 @EnableDiscoveryClient
@SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } } 複製程式碼
配置 application.yml
檔案
spring: application: name: service-provider cloud: nacos: discovery: server-addr: 10.0.0.205:8848 server: port: 9005 feign: sentinel: enabled: true 複製程式碼
配置結束,啟動provider,檢視nacos管理後臺檢視服務是否註冊成功(被檢測到)

-
啟動服務配置
Spring Cloud Alibaba Nacos Config
是Spring Cloud Config Server
和Client
的替代方案,客戶端和伺服器上的概念與Spring Environment 和 PropertySource
有著一致的抽象,在特殊的bootstrap
階段,配置被載入到Spring
環境中。當應用程式通過部署管道從開發到測試再到生產時,您可以管理這些環境之間的配置,並確保應用程式具有遷移時需要執行的所有內容服務配置功能讓我們可以通過
Nacos
後臺去修改微服務配置檔案或者在此處來寫,無需重啟專案。我們以provider為例來檢測Nacos
服務配置的強大功能。此處我們以獲取配置檔案中
nanshen.name
的值為例
1、服務端初始化
在Nacos配置管理列表裡新增一個服務配置:


配置好以後點擊發布即可!
2、客戶端初始化
因為我們已經把服務配置放到Nacos上進行動態管理,所以我們就不需要在服務中去維護配置檔案application.yml了,我們可以把它刪除掉,但是存在一個問題,我的微服務怎麼去發現Nacos中的配置呢,所以此時我們仍然需要一個bootstrap.properties配置檔案用於識別Nacos中所在伺服器中的配置檔案。

3、測試配置
編寫一個介面返回配置檔案中user.name值:此處需要使用ConfigurableApplicationContext
類,不能使用
@Value
註解讀取,因為
@Value
為一次性讀取,讀取一次後會把資料存到記憶體,不會再去讀取配置環境中的值,所以如果要實現動態配置的話就不能使用
@Value
註解。
@RestController public class TestController { @Autowired private ConfigurableApplicationContext configurableApplicationContext; @GetMapping("/get_name") public String getNanShenName(){ String username=configurableApplicationContext.getEnvironment().getProperty("user.name"); return username; } } 複製程式碼

測試動態配置:在Nacos對應的配置檔案中修改user.name值為nanshen,然後釋出,可以在微服務後臺日誌看到user.name值被修改。


如圖可以看到實現了動態修改配置檔案功能,此功能對於閘道器動態路由技術有非常大的意義。
更新中...