註冊中心 —— SpringCloud Netflix Eureka

Eureka 簡介

Eureka 是一個基於 REST 的服務發現組件,SpringCloud 將它集成在其子項目 spring-cloud-netflix 中,以實現 SpringCloud 的服務註冊與發現,同時提供了負載均衡、故障轉移等能力,目前 Eureka2.0 已經不再維護,故不推薦使用

Eureka 有兩種角色組件:

  • Eureka Server:服務註冊中心組件,提供了服務的註冊與發現的接口
  • Eureka Client:各種微服務,把自身的服務實例註冊到 Eureka Server 中,也可通過 Eureka Server 獲取服務列表,消費服務

微服務客戶端在 Eureka 上註冊,然後每隔 30 秒發送心跳來更新它們的租約。如果客戶端不能多次續訂租約,就將在大約 90 秒內從服務器註冊表中剔除。註冊信息和更新被複制到集羣中的所有 Eureka 節點,來自任何區域的客戶端都可以查找註冊表信息(每30秒發生一次)來定位它們的服務並進行遠程調用


搭建 Eureka 註冊中心

創建 eureka-server 項目,引入依賴,本項目基於 SpringBoot 2.3.1,SpringCloud Hoxton.SR12

<dependencies>
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
    ...
<dependencies>

在啓動類上添加 @EnaleEurekaServer 註解,啓用 Euerka 註冊中心功能

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

在配置文件添加 Eureka 服務端的配置

server:
  port: 8001 # 指定運行端口

spring:
  application:
    name: eureka-server # 指定服務名稱

eureka:
  instance:
    hostname: localhost # 指定主機名稱
  client:
    fetch-registry: false # 指定能否從註冊中心獲取服務
    register-with-eureka: false # 指定是否將服務註冊到註冊中心

運行 main 方法啓動服務,在瀏覽器中訪問 http://localhost:8001/ 便可以看到 Eureka 註冊中心的界面

創建 eureka-client 項目,引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

在啓動類上添加 @EnableDiscoveryClient 註解,表明是一個 Eureka 客戶端

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

在配置文件添加 Eureka 客戶端的配置

server:
  port: 8101 # 指定運行端口

spring:
  application:
    name: eureka-client # 指定服務名稱

eureka:
  client:
    fetch-registry: true # 指定能否從註冊中心獲取服務
    register-with-eureka: true # 指定是否將服務註冊到註冊中心
    service-url:
      defaultZone: http://localhost:8001/eureka

運行 main 方法,啓動 eureka-client 項目,刷新 http://localhost:8001/ 頁面,即可看到 cureka-client 已經注入 Eurcka 服務


搭建 Eureka 註冊中心集羣

由於所有服務都會註冊到註冊中心,服務之間的調用都是通過從註冊中心獲取服務列表來調用的。註冊中心一旦宕機,所有服務調用都會出現問題,因此需要多個註冊中心組成集羣來提供服務

創建兩個 eureka-server 項目,eureka-server-1 項目的配置文件如下:

server:
  port: 8002 # 指定運行端口

spring:
  application:
    name: eureka-server-1 # 指定服務名稱

eureka:
  instance:
    hostname: localhost # 指定主機名稱
  client:
    fetch-registry: true # 指定能否從註冊中心獲取服務
    register-with-eureka: true # 指定是否將服務註冊到註冊中心
    service-url:
      defaultZone: http://localhost:8003/eureka/

eureka-server-2 項目的配置文件如下:

server:
  port: 8003 # 指定運行端口

spring:
  application:
    name: eureka-server-1 # 指定服務名稱

eureka:
  instance:
    hostname: localhost # 指定主機名稱
  client:
    fetch-registry: true # 指定能否從註冊中心獲取服務
    register-with-eureka: true # 指定是否將服務註冊到註冊中心
    service-url:
      defaultZone: http://localhost:8002/eureka/

通過兩個註冊中心互相註冊,搭建註冊中心的雙節點集羣。分別啓動項目,查看 http://localhost:8001/http://localhost:8002/,可以看到兩個註冊中心已經分別註冊了


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