經過上一篇博客 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 三個模塊。負載均衡
我參考了官網的例子,並作了一點小改動,代碼和配置就不一一列出了,具體源碼見文末連接。框架
咱們須要按照順序運行它們。
eureka-server 使用 jersey 做 Web 框架(jersey 和 struts二、springMVC 做用差很少,沒接觸過也不礙事),項目最終要打包成 war 包運行在 tomcat 上。項目的運行方法以下:
mvn clean package
將項目打包成 eureka.war。補充一點,官方提供了基於 java 實現的 Eureka Client 來與 Eureka Server 進行交互,其實,咱們也能夠直接使用 rest 請求,例如,經過 http://127.0.0.1:8080/eureka/v2/apps 能夠獲取全部的服務列表。當咱們的客戶端不支持 java 時,這些接口將很是有用,具體接口能夠參考官網。在項目中,咱們查找包含javax.ws.rs.Path
註解的類,也能夠找到這些接口。
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,而且準備被消費。
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
就行。咱們能夠從控制檯看到整個過程。
以上,經過一個簡單的例子,咱們實現了將服務註冊到 Eureka Server 以及正常地消費它。這是很是「入門級」的例子,下篇博客咱們再深刻研究各類配置參數的做用。
最後,感謝閱讀。
https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
本文爲原創文章,轉載請附上原文出處連接:https://www.cnblogs.com/ZhangZiSheng001/p/14337985.html