使用Nacos作爲分佈式註冊中心,實現服務註冊與發現

上篇博文我們介紹了Nacos的基本概念以及進行了安裝,相信大家已經對Nacos有了基本認識,其實說白了Nacos就是分佈式註冊中心和分佈式配置中心的集合體。這篇博文我們介紹Nacos的第一個特性,服務的註冊與發現,也就是分佈式註冊中心的核心功能。

什麼是服務註冊與發現

服務註冊與發現是來自於微服務架構的產物。在傳統的架構系統中,服務的數量較少,一般使用靜態配置的方式實現服務信息的配置。而伴隨着微服務架構的發展,服務實例的數量和網絡地址都是動態變化的,此時對系統運維提出了巨大的挑戰。面對成百上千的服務實例,爲保障系統能夠正常的運行,必須需要有一箇中心化的組件來完成對各個服務的整合、管理等。服務提供者能夠通過註冊中心註冊服務,服務消費者通過註冊中心調用服務,完成整個請求調用。

在微服務架構中服務註冊與發現組件是必不可少的,常用的服務協調器有:Eureka、Zookeeper、Etcd,Consule等。相信大家對其中一些組件有一定的認識,甚至使用經驗。

服務註冊與發現的原理

服務註冊與發現是是針對於三大角色的:①:服務提供者 ②:服務消費者 ③:註冊中心

針對他們之間的關係描述就是服務的註冊與發現的運行原理:

1、各微服務在服務啓動的時候,服務提供者將服務的網絡地址(IP地址和端口),服務名稱,服務自身狀態以及訪問協議等信息註冊到註冊中心,註冊中心存儲該數據
2、服務消費者從註冊中心查詢到服務提供者的實例信息,並通過該地址調用服務提供者的接口
3、各個微服務與註冊中心通過一定的機制通信(例如心跳檢測機制),如果註冊中心與某微服務長時間無法通信,就會註銷該實例,即該服務對應的實例會被註冊中心剔除
4、微服務網絡地址發生變化(例如增加實例或IP變動等),會重新註冊到註冊中心,這樣,服務消費者就無需人工修改提供者的網絡地址了

如下圖所示:

在這裏插入圖片描述

瞭解了服務註冊與發現的原理,我們看一下nacos是如何實現的服務註冊與發現。

服務註冊

創建項目

我們先了解一下 Spring Cloud 應用如何接入 Nacos Discovery。

  1. 首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。

     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>
    
  2. 在nacos-discovery-provider8081 項目的 /src/main/resources/application.properties 配置文件中配置 Nacos Server 地址

     spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
  3. 使用 @EnableDiscoveryClient 註解開啓服務註冊與發現功能

     @SpringBootApplication
     @EnableDiscoveryClient
     public class ProviderApplication {
    
     	public static void main(String[] args) {
     		SpringApplication.run(Application.class, args);
     	}
     }
    
  4. 完成以上配置後,編寫Controller

   @RestController
   public class HelloWorldController {
   
       @GetMapping("/hello")
       public String hello() {
           return "hello Nacos Discovery";
       }
   }

5.啓動應用,支持 IDE 直接啓動和編譯打包後啓動。

  1. IDE直接啓動:找到 nacos-discovery-provider8081項目的主類 ProviderApplication,執行 main 方法啓動應用。
  2. 打包編譯後啓動:在 nacos-discovery-provider8081 項目中執行 mvn clean package 將工程編譯打包,然後執行 java -jar nacos-discovery-provider8081.jar啓動應用。

驗證

驗證之前,我們需要啓動nacos服務,以及服務提供者,例如:

在這裏插入圖片描述

此時我們可以看到,nacos-discovery-provider已經成功註冊到nacos了。

Nacos管理頁面查看我們的服務

在這裏插入圖片描述

Nacos接口查詢服務

我也可以通過Nacos提供的接口的查詢服務。在瀏覽器中輸入此地址 http://127.0.0.1:8848/nacos/v1/ns/catalog/instances?serviceName=nacos-discovery-provider&clusterName=DEFAULT&pageSize=10&pageNo=1&namespaceId=,並點擊跳轉,可以看到服務節點已經成功註冊到 Nacos Server。

在這裏插入圖片描述

通過管理頁面以及接口返回的信息,我們可以看到服務註冊中心保存了服務提供者的哪些相關信息。

服務發現

創建項目

  1. 首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。

     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>
    
  2. 在nacos-discovery-consumer8082 項目的 /src/main/resources/application.properties 配置文件中添加基本配置信息

    server.port=8082
    spring.application.name=nacos-discovery-consumer
    
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
  3. 使用 @EnableDiscoveryClient 註解開啓服務註冊與發現功能

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    }
    
  4. 完成以上配置後,編寫TestController。

@RestController
public class TestController {

    @Autowired
    LoadBalancerClient loadBalancerClient;

    @GetMapping("/test")
    public String test() {
        // 通過spring cloud common中的負載均衡接口選取服務提供節點實現接口調用
        ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-discovery-provider");
        String url = serviceInstance.getUri() + "/hello/" + "xiaoliang";
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForObject(url, String.class);
    }
}
  1. 啓動應用,支持 IDE 直接啓動和編譯打包後啓動。

    1. IDE直接啓動:找到 nacos-discovery-consumer8082 項目的主類 ConsumerApplication,執行 main 方法啓動應用。

    2. 打包編譯後啓動:在 nacos-discovery-consumer8082 項目中執行 mvn clean package 將工程編譯打包,然後執行 java -jar nacos-discovery-consumer8082.jar啓動應用。

驗證

  1. 同上,在Nacos管理頁面同樣可以看到我們服務消費者,不再貼圖

  2. 在瀏覽器地址欄中輸入 http://127.0.0.1:8082/test,點擊跳轉,可以看到瀏覽器顯示了 nacos-discovery-provider8081 返回的消息 “Hello xiaoliang , Welcome to Nacos Discovery!!!”,證明服務已經生效。

在這裏插入圖片描述

總結

1、nacos實現服務的註冊與發現非常的簡單,只需要引入jar包,並配置nacos服務地址即可。

2、服務消費者調用服務提供者時,我們是通過LoadBalancerClient接口來獲取的服務實例。下篇博文,我們解鎖多種服務調用的姿勢,並對服務的負載均衡進行深入的介紹。

代碼示例

本文示例讀者可以通過查看下面倉庫的中的nacos-discovery-provider8081nacos-discovery-consumer8082項目:

如果您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章