前言
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中所在伺服器中的配置檔案。
編寫一個介面返回配置檔案中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值被修改。
如圖可以看到實現了動態修改配置檔案功能,此功能對於閘道器動態路由技術有非常大的意義。
示例原始碼更新中...