Eureka Helloworld 簡單入門事例以及遇到的問題

本文參照Eureka Github的演示Demo,在自己實踐時,發現了官方的sample存在的一些問題(可能官方沒更新),文檔和網上的資料不多,無法詳細獲取到解決方案,只能自己倒騰出來,blog記錄一下。
參照源碼:Eureka-Sample Github
在看此文章前,希望你先閱讀Eureka官方文檔以瞭解一些基本概念。

Eureka 運行架構

High level architecture

Eureka Server:Eureka註冊中心,具有服務發現和服務註冊等功能
Application Service:將服務註冊到Server,提供服務
Application Client:從註冊中心中查找所需的服務,再請求調用具體提供服務的Service
Eureka Client 有兩種: 提供服務的Application Service 和請求服務的Application Client

前期準備

Eureka Server:點擊下載後,部署在Tomcat中,啓動Tomcat,成功啓動後:
eureka-server in Tomcat
啓動前按照官方推薦的方式,修改配置優化啓動方式(這種方式不要用在生產環境)
這裏寫圖片描述
eureka-client.properties拷貝到項目中作爲Application Service的配置文件,eureka-server.properties作爲Eureak Server的配置文件,按官方推薦修改:

    # 取消這兩個配置的註釋
    eureka.waitTimeInMsWhenSyncEmpty=0
    eureka.numberRegistrySyncRetries=0

最後啓動Tomcat.

項目結構

這裏寫圖片描述
項目中的eureka-client.properties 拷貝自 eureka-server.war包中.
源碼地址:Eureka-Sample Source Code
這裏寫圖片描述
注意,源碼中的配置conf有兩個配置文件:sample-eureka-service.properties + sample-eureka-client.properties,使用官方給出的示例代碼不會自動讀取這些配置,所以本例中的配置不使用此處的配置文件,只使用拷貝過來的eureka-client.properties;再者,github上的eureka項目構建使用 Gradle,本文用的是maven的依賴:

<!-- https://mvnrepository.com/artifact/com.netflix.eureka/eureka-client -->
    <dependency>
        <groupId>com.netflix.eureka</groupId>
        <artifactId>eureka-client</artifactId>
        <version>1.8.0</version> <!-- 注意版本號 -->
    </dependency>

源碼中ExampleServiceBase + ExampleEurekaService作爲Application Service,ExampleEurekaClient 作爲 Application Client。其中 ExampleEurekaGovernatedService.java 可以不要,演示要ExampleEurekaService 已經足夠了;後者是普通的啓動方式,前者是在google/Guice IOC容器中啓動,需要額外依賴Governated(netflix公司對Guice的封裝)

運行配置

運行前修改下配置文件:eureka-client.properties

eureka.region=default # 和eureka-server爲同一個區,不用修改
eureka.name=sample # eureka此處修改爲sample
eureka.vipAddress=sample.mydomain.net # 修改虛擬地址,
eureka.port=8001 # 修改爲可用端口,8080已被eureka-server佔用
eureka.preferSameZone=false
eureka.shouldUseDns=false
eureka.serviceUrl.default=http://localhost:8080/eureka/v2/
eureka.shouldOnDemandUpdateStatusChange=false

注意,eureka-client.properties 配置文件是用於Application Service連接的配置,即運行ExampleEurekaService時會自動讀取該配置文件。

啓動示例

運行ExampleEurekaService,顯示以下信息:
service-console
這裏表示Applicaiton Service 正在連接Eureka-Server,由於Eureka自我保護模式,以及心跳週期長的原因(週期性心跳,默認時間爲30秒),所以此處連接如沒有其他問題,請持續等待;演示時一分鐘後終於連接到了Eureka-Server,此時:
eureka-connected
運行控制檯此時打印出:Service started and ready to process requests…
此時,說明Application Service已經註冊到了Eureka-server中,開始接受流量,提供服務。

請求服務

Eureka中服務的註冊和發現以域名爲索引的訪問形式,Client通過域名查找需要Server上的服務,所以在運行Applicaton Client(即ExampleEurekaClient這個類)時,需要指定所需服務的域名,如本例中,eureka-client.properties中配置了eureka.vipAddress=sample.mydomain.net,所以在ExampleEurekaClient中需要指定這個vipAddress:
client-conf
而後,運行ExampleEurekaClient,如下:
client-send
按照官方代碼,運行到這裏,就開始一直等service的響應,細看下代碼,發現:
client-blocking
而ExampleEurekaClient中的發送方式:
client-fixed
明顯,readLine()沒有讀取到終止符,造成了前面一直在阻塞…….
修改下request的內容,加上終止符即可.


最後,本文簡單演示Eureka的Helloworld示例,熟悉下Eureka的基本概念和運作方式;網上資料大多都是with Spring Cloud,官方文檔對演示示例沒有詳細的描述,自己還是希望先熟悉各組件再慢慢將其組合使用,對整個框架整體思路會清晰很多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章