1. 程式人生 > >springcloud~服務註冊與發現Eureka的使用

springcloud~服務註冊與發現Eureka的使用

服務註冊與發現是微服務裡的概念,也是一個基本的元件,負責服務元件的認證,即實現『你是誰』的功能,在服務註冊與發現裡,存在兩種模式,即服務端發現和客戶端發現,咱們今天說的eureka屬於客戶端發現!

下面概念來自文章:https://blog.csdn.net/forezp/article/details/73017664

下面看幾個服務註冊與發現的基本概念:

    • Register:服務註冊 
      當Eureka客戶端向Eureka Server註冊時,它提供自身的元資料,比如IP地址、埠,執行狀況指示符URL,主頁等。

    • Renew:服務續約 
      Eureka客戶會每隔30秒傳送一次心跳來續約。 通過續約來告知Eureka Server該Eureka客戶仍然存在,沒有出現問題。 正常情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續約,它會將例項從其登錄檔中刪除。 建議不要更改續約間隔。

    • Fetch Registries:獲取註冊列表資訊 
      Eureka客戶端從伺服器獲取登錄檔資訊,並將其快取在本地。客戶端會使用該資訊查詢其他服務,從而進行遠端呼叫。該註冊列表資訊定期(每30秒鐘)更新一次。每次返回註冊列表資訊可能與Eureka客戶端的快取資訊不同, Eureka客戶端自動處理。如果由於某種原因導致註冊列表資訊不能及時匹配,Eureka客戶端則會重新獲取整個登錄檔資訊。 Eureka伺服器快取註冊列表資訊,整個登錄檔以及每個應用程式的資訊進行了壓縮,壓縮內容和沒有壓縮的內容完全相同。Eureka客戶端和Eureka 伺服器可以使用JSON / XML格式進行通訊。在預設的情況下Eureka客戶端使用壓縮JSON格式來獲取註冊列表的資訊。

    • Cancel:服務下線 
      Eureka客戶端在程式關閉時向Eureka伺服器傳送取消請求。 傳送請求後,該客戶端例項資訊將從伺服器的例項登錄檔中刪除。該下線請求不會自動完成,它需要呼叫以下內容: 
      DiscoveryManager.getInstance().shutdownComponent();

    • Eviction 服務剔除 
      在預設的情況下,當Eureka客戶端連續90秒沒有向Eureka伺服器傳送服務續約,即心跳,Eureka伺服器會將該服務例項從服務註冊列表刪除,即服務剔除。

大叔演示服務發現與註冊的環境:

  • intellij idea開發工具
  • gradle4.6構建工具
  • java1.8執行時
  • springboot腳手架

Eureka Server端的實現:

依靠包

dependencies {
    compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-server')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

配置項

server.port: 8761
management.port: 8762

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

啟動程式碼

@EnableEurekaServer
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaServerApplication {

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

訪問:http://localhost:8761/

Eureka Client端的加入:

服務端啟動後,它裡面的應用是空的,這時我們新增一個客戶端,注意,這裡的客戶端是指Eureka的,它可能對於其它服務來說,是個服務端,為其它介面提供資料的,這是有可能的。(我這個客戶端同時引用了配置中心的概念,它也是配置中心的使用端,這個專案的配置檔案通過配置中心來統一進行分散式管理

依賴包

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web',
            'org.springframework.cloud:spring-cloud-starter-config',
            'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

配置項

spring:
  application:
    name: email-client
  cloud:
    config:
      uri: http://localhost:8200
server:
  port: 8300

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

啟動程式碼

@EnableEurekaClient
@SpringBootApplication
public class Application {

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

我們啟動它之後,去eureka server介面去檢視, http://localhost:8761,你會發現,我們的服務出現在了服務列表裡!

感謝各位的閱讀!

謝謝!