Spring Cloud Alibaba學習筆記(2) - Nacos服務發現


1.什么是Nacos

  Nacos的官網對這一問題進行了詳細的介紹,通俗的來說:

  Nacos是一個服務發現組件,同時也是一個配置服務器,它解決了兩個問題:

    1.服務A如何發現服務B

    2.管理微服務的配置

2.搭建Nacos Server

2.1  環境准備

  Nacos依靠java環境運行,搭建Nacos Server,需要配置maven環境,版本環境要求如下:

    1、64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac
    2、64 bit JDK 1.8+
    3、Maven 3.2.x+

2.2 服務端獲取

  Nacos提供了兩種方式獲取Nacos的服務端:

    1、源碼下載編譯

    2、下載 Release 包

2.2.1 源碼下載編譯

  在你需要安裝的地址下,執行:git clone https://github.com/alibaba/nacos.git

  將源碼下載到本地之后,進入源碼目錄:cd nacos

    

   執行命令:mvn -Prelease-nacos clean install -U

    

  進入啟動命令:cd distribution/target/nacos-server-1.1.3/nacos/bin/

2.2.2 下載 Release 包

  從這個網址下載nacos-server-$version.zip 包,執行解壓縮命令:unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
  進入命令執行頁面:  cd nacos/bin

2.3 啟動服務器

  Lunix系統:

    啟動命令(standalone代表着單機模式運行,非集群模式):
      sh startup.sh -m standalone


    如果您使用的是ubuntu系統,或者運行腳本報錯提示[[符號找不到,可嘗試如下運行:
      bash startup.sh -m standalone

 

  Windows系統:

    啟動命令:
      cmd startup.cmd

    或者雙擊startup.cmd運行文件

  啟動成功后

    

   打開瀏覽器輸入:http://127.0.0.1:8848/nacos,進入nacos可視化控制頁面,賬號密碼默認nacos。

    

 3. 將應用注冊到Nacos

  首先,在加依賴,在dependencies中添加

 <dependency>
       <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>

  然后,修改配置(server-addr不要加http或者https前綴,直接主機名/IP/域名 + 端口號就可以了)

spring:
  cloud:
    nacos:
      discovery:
        # 指定nacos server地址
        server-addr: localhost:8848
  application:
    name: study01

 

  啟動服務,打開Nacos Server控制台,可以看見剛剛啟動的服務已經注冊成功。  

 

 

 

PS:對於Nacos Server版本與Nacos Client版本對應問題:

  應用集成Nacos Client從而和Nacos Server通信,我們通過查看spring-cloud-alibaba-dependencies文件中使用了哪個Nacos Client版本,下載相同版本的Nacos Server版本即可。

    

  可以看見我當前版本的Spring Cloud Alibaba使用的Nacos Client版本為1.1.1,由於Nacos沒有提供Nacos server1.1.1版本包,所以我直接使用了Nacos server1.1.3。

  

4.服務間調用

  如何在服務A中調用服務B的請求,分為兩步進行:

  1.獲取服務B的URL,因為考慮到服務B可能部署在多個服務器,或者更換升級服務器,所以不能夠直接寫死URL,我們利用DiscoveryClient接口動態的獲取服務B的URL

import org.springframework.cloud.client.discovery.DiscoveryClient;

private final DiscoveryClient discoveryClient;

// 服務B所有示例的信息
List<ServiceInstance> instances = discoveryClient.getInstances("服務B");
String targetURL = instances.stream()
        .map(instance -> instance.getUri().toString() + "/***/***")
        .findFirst()
        .orElseThrow(() -> new IllegalArgumentException("當前示例不存在"));

  2.調用服務B的請求,我們使用RestTemplate接口完成這一操作

import org.springframework.web.client.RestTemplate;

private final RestTemplate restTemplate;

Demo forObject = restTemplate.getForObject(targetURL, Demo.class, "請求參數");

5.服務發現的領域模型

5.1 領域模型有哪些,有什么作用?

      

 

 

   關於領域模型,可以通過上圖來理解:

    最大的是Namespace(命名空間),Nacos默認的命名空間是public,Namespace主要用來實現隔離。比方說我們現在有三個環境:開發、測試、生產環境,我們就可以創建三個Namespace,不同的Namespace之間是隔離的。

      

 

 

    Namespace之下是Group(分組),Nacos默認Group是DEFAULT_GROUP,Group可以把不同的微服務划分到同一個分組里面去,Group可以方便我們的管理。

      

 

 

     Group之下是Service,就是我們所謂的微服務;一個Service可以包含多個Cluster(集群),Nacos默認Cluster是DEFAULT,Cluster是對指定微服務的一個虛擬划分,比方說為了容災,將Service微服務分別部署在了杭州機房和廣州機房,這時就可以給杭州機房的Service微服務起一個集群名稱(HZ),給廣州機房的Service微服務起一個集群名稱(GZ),還可以盡量讓同一個機房的微服務互相調用,以提升性能。最后是Instance,就是微服務的示例。

     

 

 

 5.2 如何指定領域模型

  首先在控制台新建一個命名空間

    

 

    

   創建成功之后得到了一個UUID,將此UUID配置在配置文件中(一定要配置UUID,而不是命名空間名稱),同時配置集群名稱:

spring:
  cloud:
    nacos:
      discovery:
        # 指定nacos server地址
        server-addr: localhost:8848
        namespace: ab9783a7-dade-4da3-9abf-5cb2f5c52d59
        cluster-name: HZ

  可以在控制台查看到,多出了一個dev命名空間

    

 

   服務中也多出了一個HZ集群

    

6. 元數據

  Nacos數據(如配置和服務)描述信息,如服務版本、權重、容災策略、負載均衡策略、鑒權配置、各種自定義標簽 (label),從作用范圍來看,分為服務級別的元信息、集群的元信息及實例的元信息。

6.1 元數據的作用

  1、提供描述信息

  2、讓微服務的調用更加靈活

    微服務版本控制

6.2 如何配置元數據

  1、控制台設置(key-value形式)

 

 

  2、配置文件配置

spring:
  cloud:
    nacos:
      discovery:
    # 元數據 metadata: target-version: v1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM