Spring cloud 服務註冊發現

服務發現

在Spring cloud中,要注意區別服務和服務實例,這是兩個概念,一個微服務單元可以部署多個節點, 每個節點即一個服務實例,Spring cloud默認通過 spring.application.name 配置項來標識一個微服務。

爲什麼需要服務發現機制? 服務發現是微服務架構中的關鍵一環,當系統服務化後,手動配置管理各個服務的調用地址已經變得非常繁重, 通過一箇中心化的服務註冊中中心,可以把調用方和提供方解耦,這樣服務調用和服務上下線都變得更具彈性, 服務可用性更高。

怎麼使用

集成Nacos服務註冊中心

集成nacos服務註冊中心的的話,需要在項目中引入 spring-cloud-starter-alibaba-nacos-discovery 模塊, 引入此模塊後,在Spring boot自動配置的作用下,當前節點就成爲一個nacos服務實例,同時也作爲一個nacos客戶端, 在程序啓動時該模塊在背後自動把當前節點註冊爲一個nacos服務實例,同時需要調用其他服務時可以從nacos服務端拉取 其他微服務實例列表。

配置:

需要指定nacos註冊中心的連接信息,nacos註冊中心在 spring.cloud.nacos.discovery 配置節點下編寫:

spring:
  application:
    name: demo-svc
  cloud:
    nacos:
      discover:
        server-addr: ${nacosHosts}
        namespace: "demo-namespace"

在程序主配置類中標註@EnableDiscoveryClient啓用服務發現機制:

@SpringBootApplication
@EnableDiscoveryClient
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

使用@EnableDiscoveryClient後,應用程序啓動時,就會在容器中註冊一個DiscoveryClient的實現對象, 當前節點就可以使用此對象從註冊中心拉去服務實例列表。 同時,也會自動把節點自己註冊到nacos對外暴露服務,共其它服務發現調用。如果要禁用當前節點服務自動註冊機制, 配置屬性autoRegister="false"即可。

如果要關閉服務註冊和發現機制可以配置屬性 spring.cloud.nacos.discovery=false

集成Eureka服務註冊中心

如果要使用Eureka作爲服務註冊中心,對應的應該引入 spring-cloud-starter-netflix-eureka-client 模塊,屬性配置在 eureka.client 節點中編寫,使用方式區別不大。

採用SimpleDiscoveryClient

SimpleDiscoveryClient 可以作爲一個備用的 DiscoveryClient 實現,當不使用任何外部的服務註冊中心時,可以通過配置 一個SimpleDiscoveryClient對象並提供具體的服務實例列表,這樣用也可以實現服務調用。

用法參考 SimpleDiscoveryClient文檔頁面

Spring Cloud 服務發現抽象

DiscoveryClient

DiscoveryClient是服務發現抽象接口,定義了從服務註冊中心讀取服務信息的標準方法,Nacos、Eureka、Zookeeper等 作爲註冊中心都提供對DiscoveryClient的對應實現。

DiscoveryClient需要結合@EnableDiscoveryClient註解使用,@EnableDiscoveryClient 的作用是讓Spring在啓動階段加載 DiscoveryClient 的所有實現者,通過Spring工廠加載機制實現。

ServiceRegistry

ServiceRegistry 定義了向註冊中心註冊和取消註冊服務實例的方法,Eureka、Nacos、Zookeeper等 作爲具體註冊中心服務都會提供次接口的實現。

Spring boot程序啓動時,ServiceRegistry會自動把當前實例註冊到背後的註冊中心,如果要關閉自動註冊 行爲,可以設置 @EnableDiscoveryClient#autoRegister 的值爲 false,或者設置Spring cloud 配置 spring.cloud.service-registry.auto-registration.enabled=false

關於Eureka

Eureka是Netflix發行的一款服務註冊組件,Spring cloud官方對其進行集成,可作爲Spring cloud程序的微服務註冊中心。

Eureka分爲eureka-server和eureka-client兩部分,前者是服務註冊中心服務端,後者是客戶端,每一個微服務 實例就是一個客戶端,因此在微服務實例中需要依賴eureka-client部分。

微服務實例啓動後,會自動向eureka註冊微服務自身的信息,通過向eureka.client.server-url配置指定的地址 發起請求完成註冊。

微服務實例在運行過程中會週期性的向Eureka服務端發送服務續約請求,這個機制可以避免微服務實例不可用時註冊中心 仍然記錄該服務實例,如果eureka服務器發現超過一定時間沒有收到某個微服務實例的續約請求,就會下線超時的微服務 實例。服務註冊、服務發現以及服務續約都是從客戶端發起的,eureka-client中有實現細節。

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