eureka 基礎簡單介紹

服務發現:Eureka客戶端

服務發現是基於微服務架構的關鍵原則之一。嘗試配置每一個客戶端或某種形式的約定可能很是困難,能夠很是脆弱。Netflix服務發現服務器和客戶端是Eureka。能夠將服務器配置和部署爲高可用性,每一個服務器將註冊服務的狀態複製到其餘服務器。web

如何包含Eureka客戶端

要在您的項目中包含Eureka客戶端,請使用組org.springframework.cloud和工件ID spring-cloud-starter-eureka的啓動器。spring

註冊Eureka

當客戶端註冊Eureka時,它提供關於自身的元數據,例如主機和端口,健康指示符URL,主頁等。Eureka從屬於服務的每一個實例接收心跳消息。若是心跳失敗超過可配置的時間表,則一般將該實例從註冊表中刪除。bootstrap

示例eureka客戶端:安全

@Configuration  
@ComponentScan  
@EnableAutoConfiguration  
@EnableEurekaClient  
@RestController  
public class Application {  
  
    @RequestMapping("/")  
    public String home() {  
        return "Hello world";  
    }  
  
    public static void main(String[] args) {  
        new SpringApplicationBuilder(Application.class).web(true).run(args);  
    }  
  
}

(即徹底正常的Spring Boot應用程序)。在這個例子中,咱們明確地使用@EnableEurekaClient,但只有Eureka可用,你也可使用@EnableDiscoveryClient。須要配置才能找到Eureka服務器。例:服務器

application.yml架構

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

其中「defaultZone」是一個魔術字符串後備值,爲任何不表示首選項的客戶端提供服務URL(即它是有用的默認值)。app

從Environment獲取的默認應用程序名稱(服務ID),虛擬主機和非安全端口分別爲${spring.application.name},${spring.application.name}和${server.port}。框架

@EnableEurekaClient將應用程序同時進入一個Eureka「實例」(即註冊本身)和一個「客戶端」(即它能夠查詢註冊表以查找其餘服務)。實例行爲由eureka.instance.*配置鍵驅動,可是若是您確保您的應用程序具備spring.application.name(這是Eureka服務ID或VIP的默認值),那麼默認值將是正常的。微服務

使用Eureka服務器進行身份驗證
若是其中一個eureka.client.serviceUrl.defaultZone網址中包含一個憑據(如http://user:password@localhost:8761/eureka)),HTTP基自己份驗證將自動添加到您的eureka客戶端。對於更復雜的需求,您能夠建立DiscoveryClientOptionalArgs類型的@Bean,並將ClientFilter實例注入到其中,全部這些都將應用於從客戶端到服務器的調用。ui

注意
因爲Eureka中的限制,不可能支持每一個服務器的基自己份驗證憑據,因此只能使用第一個找到的集合。
狀態頁和健康指標
Eureka實例的狀態頁面和運行情況指示器分別默認爲「/ info」和「/ health」,它們是Spring Boot執行器應用程序中有用端點的默認位置。若是您使用非默認上下文路徑或servlet路徑(例如server.servletPath=/foo)或管理端點路徑(例如management.contextPath=/admin),則須要更改這些,即便是執行器應用程序。例:

application.yml  
eureka:  
  instance:  
    statusPageUrlPath: ${management.context-path}/info  
    healthCheckUrlPath: ${management.context-path}/health

這些連接顯示在客戶端使用的元數據中,並在某些狀況下用於決定是否將請求發送到應用程序,所以若是它們是準確的,這是有幫助的。

註冊安全應用程序
若是您的應用程序想經過HTTPS聯繫,則能夠分別在EurekaInstanceConfig,即 eureka.instance.[nonSecurePortEnabled,securePortEnabled]=[false,true] 中設置兩個標誌。這將使Eureka發佈實例信息顯示安全通訊的明確偏好。Spring Cloud DiscoveryClient將始終爲以這種方式配置的服務返回一個https://…​; URI,而且Eureka(本機)實例信息將具備安全的健康檢查URL。

因爲Eureka內部的工做方式,它仍然會發布狀態和主頁的非安全網址,除非您也明確地覆蓋。您可使用佔位符來配置eureka實例URL,例如

application.yml  
eureka:  
  instance:  
    statusPageUrl: https://${eureka.hostname}/info  
    healthCheckUrl: https://${eureka.hostname}/health  
    homePageUrl: https://${eureka.hostname}/

(請注意,${eureka.hostname}是僅在稍後版本的Eureka中可用的本地佔位符,您也可使用Spring佔位符實現一樣的功能,例如使用${eureka.instance.hostName}。

注意
若是您的應用程序在代理服務器後面運行,而且SSL終止服務在代理中(例如,若是您運行在Cloud Foundry或其餘平臺做爲服務),則須要確保代理「轉發」頭部被截取並處理應用程序。Spring Boot應用程序中的嵌入式Tomcat容器會自動執行「X-Forwarded - \ *」標頭的顯式配置。你這個錯誤的一個跡象就是你的應用程序自己所呈現的連接是錯誤的(錯誤的主機,端口或協議)。
Eureka的健康檢查
默認狀況下,Eureka使用客戶端心跳來肯定客戶端是否啓動。除非另有規定,不然發現客戶端將不會根據Spring Boot執行器傳播應用程序的當前運行情況檢查狀態。這意味着成功註冊後Eureka將永遠宣佈申請處於「UP」狀態。經過啓用Eureka運行情況檢查能夠改變此行爲,從而將應用程序狀態傳播到Eureka。所以,每一個其餘應用程序將不會在「UP」以外的狀態下將流量發送到應用程序。

application.yml  
eureka:  
  client:  
    healthcheck:  
      enabled: true

警告
eureka.client.healthcheck.enabled=true只能在application.yml中設置。設置bootstrap.yml中的值將致使不指望的反作用,例如在具備UNKNOWN狀態的eureka中註冊。
若是您須要更多的控制健康檢查,您能夠考慮實施本身的com.netflix.appinfo.HealthCheckHandler。

Eureka實例和客戶端的元數據
值得花點時間瞭解Eureka元數據的工做原理,以便您能夠在平臺上使用它。有主機名,IP地址,端口號,狀態頁和運行情況檢查等標準元數據。這些發佈在服務註冊表中,由客戶使用,以直接的方式聯繫服務。額外的元數據能夠添加到eureka.instance.metadataMap中的實例註冊中,而且這將在遠程客戶端中可訪問,但通常不會更改客戶端的行爲,除非意識到元數據的含義。下面描述了幾個特殊狀況,其中Spring Cloud已經爲元數據映射指定了含義。

在Cloudfoundry上使用Eureka
Cloudfoundry有一個全局路由器,因此同一個應用程序的全部實例都具備相同的主機名(在具備類似架構的其餘PaaS解決方案中也是如此)。這不必定是使用Eureka的障礙,但若是您使用路由器(建議,甚至是強制性的,具體取決於您的平臺的設置方式),則須要明確設置主機名和端口號(安全或非安全),以便他們使用路由器。您可能還須要使用實例元數據,以便您能夠區分客戶端上的實例(例如,在自定義負載平衡器中)。默認狀況下,eureka.instance.instanceId爲vcap.application.instance_id。例如:

application.yml  
eureka:  
  instance:  
    hostname: ${vcap.application.uris[0]}  
    nonSecurePort: 80

服務發現:Eureka服務器
如何包含Eureka服務器
要在項目中包含Eureka服務器,請使用組org.springframework.cloud和工件id spring-cloud-starter-eureka-server的啓動器。有關 使用當前的Spring Cloud發佈列表設置構建系統的詳細信息,請參閱Spring Cloud項目頁面。

如何運行Eureka服務器
示例eureka服務器;

@SpringBootApplication  
@EnableEurekaServer  
public class Application {  
  
    public static void main(String[] args) {  
        new SpringApplicationBuilder(Application.class).web(true).run(args);  
    }  
  
}

其餘的我就很少講了,還有不少關於註冊中心的講解,你們能夠去查一下相關的資料。

從如今開始,我這邊會將近期研發的spring cloud微服務雲架構的搭建過程和精髓記錄下來,幫助更多有興趣研發spring cloud框架的朋友,你們來一塊兒探討spring cloud架構的搭建過程及如何運用於企業項目。 

相關文章
相關標籤/搜索