1. 程式人生 > >springcloud之Eureka基礎

springcloud之Eureka基礎

Eureka簡介

1、Eureka原理

在這裡插入圖片描述

Application server:相當於專案中的服務提供者;
Application Client:相當於本書的服務消費者;
Make Remote Call:可以理解成呼叫RESTful API的行為;
us-east-lc、us-east-ld等都是zone,它們都屬於us-east-l這個region;

2、Eureka的兩個元件 Eureka server 和 Eureka Client

Eureka server:提供服務發現的能力,各個微服務啟動時,會向Eureka server註冊自己的資訊(例如:IP、埠、微服務名稱等),Eureka server會儲存這些資訊;
Eureka Client:是一個Java客戶端,用於簡化與Eureka server的互動;
微服務啟動後,會週期性(預設30s)地向Eureka server傳送心跳以續約自己的“租期”;
如果Eureka Server在一定時間內沒有接收到某個微服務例項的心跳,Eureka Server將登出該例項(預設90 s);
預設情況下,Eureka Server同時也是Eureka Client。多個Eureka Server例項互相直接通過複製的方式來實現服務註冊列表中資料的同步;
Eureka Client會快取服務登錄檔中的資訊,這種方式有一定的優勢——首先,微服務無需每次請求都查詢Eureka Server,從而降低了Eureka Server的壓力;其次,即使Eureka Server所有節點都宕掉,服務消費者依然可以使用快取中的資訊找到服務提供者並完成呼叫。

註釋:Eureka通過心跳檢查、客戶端快取等機制,提高了系統的靈活性、可伸縮性和可用性;

3、建立Eureka Server

(1)依賴的jar包

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

(2)啟動類的編寫

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }
}

註解:

@EnableEurekaServer表示宣告一個Eureka Service

(3)application.xml檔案的配置

server:
  port: 6868
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:${server.port}/eureka/

註解

server.port:表示當前服務的埠號
eureka.client.registerWithEureka:表示是否將自己註冊到Eureka Server,預設為true。由於當前應用就是Eureka Server,故而設為false;
eureka.client.fetchRegistry:表示是否從Eureka Server獲取註冊資訊,預設為true。因為這是一個單點的Eureka Server,不需要同步其他的Eureka Server節點的資料,故而設為false;
eureka.client.serviceUrl.defaultZone:設定與Eureka Server互動的地址,查詢服務和註冊服務需要依賴這個地址。預設是http://127.0.0.1:${server.port}/eureka/  多個地址之間可以使用,分隔。

(4)測試

啟動Eureka Server 訪問http://127.0.0.1:6868/

3、將微服務註冊到Eureka Server上

(1)依賴jar包

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

(2)application.yml配置檔案

pring: 
  application:  
    name:  yczj-manager
eureka:
  client:
     serviceUrl:
        defaultZone: http://127.0.0.1:6868/eureka/
  instance:
    prefer-ip-address: true

註釋:

pring.application.name:用於指定註冊到Eureka Server上的應用名稱;
eureka.instance.prefer-ip-address:表示將自己的IP註冊到Eureka Server。如不配置該屬性獲將其設定為false,則表示註冊微服務所在作業系統的hostname到Eureka Server;

(3)啟動類

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

註釋:

這樣既可將使用者微服務註冊到Eureka Server上。同理,將其他微服務也註冊到Erueka Server上,配置以上資訊

注意事項:

1、在Spring Cloud Edgware之前,要想將微服務註冊到Eureka Server或其他服務發現元件上,必須在啟動類上新增@EnableDiscoveryClient或者@EnableEurekaClient
2、在Spring CloudEdgware以及更高版本中,只需要新增相關依賴,即可自動註冊。這是由於在實際專案中,我們可能希望實現“不同環境不同配置”的效果,例如:在開發環境中,不註冊到Eureka Server上,而是服務提供者、服務消費者直連,便於調測;在生產環境中,我們有希望能夠享受服務發現的優勢---服務消費者無須知道服務提供者的絕對地址。
3、如不想將服務註冊到Eureka Server,只需設定
spring.cloud.service-reg-istry.auto-registration.enabled=false
或者@EnableDiscoveryClient(auto-Register=false)即可