SpringCloud 2020.0.4 系列之Eureka

1. 概述

老話說的好:遇見困難,首先要做的是積極的想解決辦法,而不是先去泄氣、抱怨或生氣。

 

言歸正傳,微服務是當今非常流行的一種架構方式,其中 SpringCloud 是我們常用的一種微服務框架。

今天我們來聊聊 SpringCloud 中的服務治理組件 Eureka。

 

2. Eureka服務端的搭建

2.1 新建項目

打開IDEA,選擇 File —> New —> Project…

 

2.2 填寫項目資訊

選擇 Spring Initializr,填寫項目資訊

 

2.3 選擇依賴項

選擇 Spring Cloud Discovery —> Eureka Server

 

2.4 主要依賴

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

 

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2020.0.4</spring-cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

 

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

 

2.5 配置 Eureka Server

spring:
  application:
    name: my-eureka
server:
  port: 35000
eureka:
  instance:
    hostname: localhost               # 應用實例主機名
  client:
    register-with-eureka: false       # 是否發起服務註冊
    fetch-registry: false             # 是否拉取服務註冊表
  server:
    enable-self-preservation: false         # 是否開啟服務自我保護,建議關閉,開啟自我保護機制後,實例宕機也被不會剔除
    eviction-interval-timer-in-ms: 10000    # 每隔多久觸發一次服務剔除,默認是60秒

建議關閉服務自我保護。

 

2.6 啟動類中增加 @EnableEurekaServer 註解

 

2.7 啟動 Eureka Server

啟動 Eureka Server 項目,在瀏覽器輸入 //Eureka伺服器IP:35000/,可以查看 Eureka Server 控制台。

 

3. Eureka客戶端(Demo)的搭建

3.1 新建項目,選擇依賴項

選擇 Spring Cloud Discovery —> Eureka Discorvery Client

 

3.2 主要依賴

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 健康檢查 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

 

3.3 配置 Eureka Client

spring:
  application:
    name: my-eureka-client
server:
  port: 36000
eureka:
  client:
    service-url:
      defaultZone: http://192.168.1.22:35000/eureka/    # Eureka Server的地址
    healthcheck:
      enabled: true    # 開啟健康檢查, 依賴於 spring-boot-starter-actuator
  instance:
    lease-renewal-interval-in-seconds: 5      # 發出續約指令的間隔,默認30秒
    lease-expiration-duration-in-seconds: 30  # 租期到期時間,默認90秒

 

3.4 啟動類中增加 @EnableDiscoveryClient 註解

 

 

3.5 啟動 Eureka Client

啟動 Eureka Client 項目,在之前的 Eureka Server 控制台可以看到註冊的服務

 

 

4. Eureka Server 高可用

4.1 概述

如果 Eureka Server 是單點應用,則宕機後,整個鏈路都會癱瘓。

因此我們採用多 Eureka Server 互相註冊的方式,實現 Eureka Server 的高可用。

這裡以兩台 Eureka Server 為例。

 

4.2 配置伺服器的 hostname

# vi /etc/hostname

例如: zhuifengren1、zhuifengren2

 

4.3 配置hosts

配置伺服器節點的 hosts,使IP地址與hostname對應

# vi /etc/hosts

例如:

192.168.1.22 zhuifengren1
192.168.1.12 zhuifengren2

 

4.4 修改 Eureka Server1 的配置文件

spring:
  application:
    name: my-eureka
server:
  port: 35000
eureka:
  instance:
    hostname: zhuifengren1                # 應用實例主機名
  client:
    service-url:
      defaultZone: http://zhuifengren2:35001/eureka/    # Eureka Server的地址
  server:
    enable-self-preservation: false         # 是否開啟自我保護,建議關閉,開啟自我保護機制後,實例宕機也被不會剔除
    eviction-interval-timer-in-ms: 10000    # 每隔多久觸發一次服務剔除,默認是60秒

 

4.5 修改 Eureka Server2 的配置文件

spring:
  application:
    name: my-eureka
server:
  port: 35001
eureka:
  instance:
    hostname: zhuifengren2                # 應用實例主機名
  client:
    service-url:
      defaultZone: http://zhuifengren1:35000/eureka/    # Eureka Server的地址
  server:
    enable-self-preservation: false         # 是否開啟自我保護,建議關閉,開啟自我保護機制後,實例宕機也被不會剔除
    eviction-interval-timer-in-ms: 10000    # 每隔多久觸發一次服務剔除,默認是60秒

 

注意:兩台 Eureka Server 的 spring.application.name 必須相同

 

4.6 修改 Eureka Client 的配置文件

server:
  port: 36000
eureka:
  client:
    service-url:
      defaultZone: http://zhuifengren1:35000/eureka/,//zhuifengren2:35001/eureka/    # Eureka Server的地址
    healthcheck:
      enabled: true    # 開啟健康檢查, 依賴於 spring-boot-starter-actuator
  instance:
    lease-renewal-interval-in-seconds: 5      # 發出續約指令的間隔,默認30秒
    lease-expiration-duration-in-seconds: 30  # 租期到期時間,默認90秒

 

4.7 啟動服務

啟動後,任意停止某一個 Eureka Server,不影響 Eureka Client 服務的註冊。

 

 

5. 綜述

今天聊了一下 Eureka的相關知識,希望可以對大家的工作有所幫助。

歡迎幫忙點贊、評論、轉發、加關注 :)

關注追風人聊Java,每天更新Java乾貨。

 

6. 個人公眾號

追風人聊Java,歡迎大家關注