Eureka詳解系列(二)--如何使用Eureka(原生API,無Spring)

簡介

經過上一篇博客 Eureka詳解系列(一)--先談談負載均衡器 ,咱們知道了 Eureka 是什麼以及爲何要使用它,今天,咱們開始研究如何使用 Eureka。html

在此以前,先說明一點。網上幾乎全部關於 Eureka 的文章都是基於 Spring 的,但本文的例子不會有任何 Spring 的代碼,我儘可能使用 Eureka 原生的 API,後面的源碼分析也是如此。由於 Spring 把 Eureka 藏得越好,咱們研究起來就會越困難,畢竟我寫這個系列不是隻爲了學會怎麼使用 Eureka,咱們還要分析它的源碼。固然,實際項目中就不必這麼搞了。java

另外,這只是一個簡單的例子,只配置了幾個必備的參數,下篇博客會展開分析。git

項目環境

os:win 10github

jdk:1.8.0_231web

eureka:1.10.11spring

tomcat:9.0.21tomcat

maven:3.6.3app

使用例子

如何設計例子

經過 Eureka 的結構圖能夠知道,咱們須要分別搭建 Eureka Server、Eureka Client for application service、Eureka Client for application client 三個模塊。負載均衡

zzs_eureka_10

我參考了官網的例子,並作了一點小改動,代碼和配置就不一一列出了,具體源碼見文末連接。框架

zzs_eureka_13

  1. eureka-server:做爲 Eureka Server,它是一個獨立的 Web 服務,可以處理 Eureka Client 的 rest 請求:註冊、續約、註銷服務,以及獲取服務的信息。它須要打包成 war 包運行在 tomcat 上。
  2. eureka-service:做爲 application service,它須要向 Eureka Server 註冊本身,並監聽 Eureka Client 的消費請求。
  3. eureka-client:做爲 application client,它須要從 Eureka Server 獲取 application service 的地址,而後訪問 application service。

如何運行例子

咱們須要按照順序運行它們。

eureka-server

eureka-server 使用 jersey 做 Web 框架(jersey 和 struts二、springMVC 做用差很少,沒接觸過也不礙事),項目最終要打包成 war 包運行在 tomcat 上。項目的運行方法以下:

  1. 構建項目。使用mvn clean package將項目打包成 eureka.war。
  2. 將 eureka.war 拷貝到 ${CATALINA_HOME}/webapps 目錄下。
  3. 啓動 tomcat。經過 http://127.0.0.1:8080/eureka/ 能夠訪問成功,這個時候,咱們就可使用 Eureka Client 往上面註冊服務了。另外,咱們能夠看到,Eureka Server 將本身註冊了上去(30s 內)。
zzs_eureka_11

補充一點,官方提供了基於 java 實現的 Eureka Client 來與 Eureka Server 進行交互,其實,咱們也能夠直接使用 rest 請求,例如,經過 http://127.0.0.1:8080/eureka/v2/apps 能夠獲取全部的服務列表。當咱們的客戶端不支持 java 時,這些接口將很是有用,具體接口能夠參考官網。在項目中,咱們查找包含javax.ws.rs.Path註解的類,也能夠找到這些接口。

eureka-service

eureka-service 的實現比較簡單,它先把本身註冊到 Eureka Server,而後一直監聽 application client 的消費,監聽到後,只進行簡單的交互後就直接關閉客戶端。代碼簡化以下:

// 建立ApplicationInfoManager對象(用來註冊、註銷當前實例)
ApplicationInfoManager applicationInfoManager = new ApplicationInfoManager(
    new MyDataCenterInstanceConfig(), new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get());
// 建立EurekaClient對象(用來獲取其餘服務以及提供內部入口用來註冊、續約、和註銷當前實例)
EurekaClient eurekaClient = new DiscoveryClient(applicationInfoManager, new DefaultEurekaClientConfig());
// 設置當前實例狀態爲STARTING
applicationInfoManager.setInstanceStatus(InstanceInfo.InstanceStatus.STARTING);
// 設置當前實例狀態爲UP----》這個時候會向Eureka Server註冊本身
applicationInfoManager.setInstanceStatus(InstanceInfo.InstanceStatus.UP);
// 和application client交互
// ······
// 關閉客戶端,同時也會註銷當前實例
eurekaClient.shutdown();

操做方法很簡單,只要運行ExampleEurekaService.main方法就行。當控制檯出現"Service started and ready to process requests.."時,說明當前實例已經註冊到 Eureka Server,而且準備被消費。

zzs_eureka_12

eureka-client

eureka-client 項目的具體邏輯爲:從 Eureka Server 上獲取到註冊表,而後和 application service 交互,獲得響應後直接關閉客戶端。代碼簡化以下:

// 建立ApplicationInfoManager對象(用來註冊、註銷當前實例)
ApplicationInfoManager applicationInfoManager = new ApplicationInfoManager(
    new MyDataCenterInstanceConfig(), new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get());
// 建立EurekaClient對象(用來獲取其餘服務以及提供內部入口用來註冊、續約、和註銷當前實例)
EurekaClient eurekaClient = new DiscoveryClient(applicationInfoManager, new DefaultEurekaClientConfig());
// 獲取指定服務的實例對象
InstanceInfo nextServerInfo = eurekaClient.getNextServerFromEureka(vipAddress, false);
// 和application service交互
// ······
// 關閉客戶端
eurekaClient.shutdown();

直接運行ExampleEurekaClient.main就行。咱們能夠從控制檯看到整個過程。

zzs_eureka_14

以上,經過一個簡單的例子,咱們實現了將服務註冊到 Eureka Server 以及正常地消費它。這是很是「入門級」的例子,下篇博客咱們再深刻研究各類配置參數的做用。

最後,感謝閱讀。

參考資料

https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance

相關源碼請移步:https://github.com/ZhangZiSheng001/eureka-demo

本文爲原創文章,轉載請附上原文出處連接:https://www.cnblogs.com/ZhangZiSheng001/p/14337985.html

相關文章
相關標籤/搜索