Spring Cloud Alibaba---服務註冊、發現、管理中心Nacos

♂???木發表於2019-03-14

前言


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.cmdshutdown.cmd
    linux中執行指令碼sh startup.sh -m standalonesh 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
   

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

  1、服務端初始化
  在Nacos配置管理列表裡新增一個服務配置:

Spring Cloud Alibaba---服務註冊、發現、管理中心Nacos

Spring Cloud Alibaba---服務註冊、發現、管理中心Nacos

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

Spring Cloud Alibaba---服務註冊、發現、管理中心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;
    }
}
複製程式碼

Spring Cloud Alibaba---服務註冊、發現、管理中心Nacos
  測試動態配置:在Nacos對應的配置檔案中修改user.name值為nanshen,然後釋出,可以在微服務後臺日誌看到user.name值被修改。

Spring Cloud Alibaba---服務註冊、發現、管理中心Nacos

Spring Cloud Alibaba---服務註冊、發現、管理中心Nacos

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

示例原始碼更新中...

相關文章