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

1.什麼是Nacos

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

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

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

    2.管理微服務的配置github

2.搭建Nacos Server

2.1  環境準備

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

    一、64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac
    二、64 bit JDK 1.8+
    三、Maven 3.2.x+spring

2.2 服務端獲取

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

    一、源碼下載編譯瀏覽器

    二、下載 Release 包bash

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 元數據的做用

  一、提供描述信息

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

    微服務版本控制

6.2 如何配置元數據

  一、控制檯設置(key-value形式)

 

 

  二、配置文件配置

spring: cloud: nacos: discovery:    # 元數據 metadata: target-version: v1
相關文章
相關標籤/搜索