我在使用Docker的Spring Cloud環境中使用Netflix Eureka和Zuul時目前遇到問題。Zuul和Eureka的Spring雲無法處理服務實例正在關閉
我目前的設置如下:3個Docker容器:
- 一個尤里卡服務器
- 使用尤里卡映射路由服務和負載同一服務的多個容器之間平衡一個Zuul服務器。
- 服務(目前只返回一個簡單的字符串)
這種設置工作正常,但是當我開始與服務的比例打麻煩開始了。 當我擴大規模時,Zuul會在30秒後拿起新服務器。那個我能接受。但是,當我關閉服務容器時,由於Zuul仍認爲服務器在活動池中,因此對Zuul的調用可能會失敗(HTTP錯誤代碼爲200!)。
我使用Spring 1.3.6引導和Spring 1.1.2雲
我的問題:
- 可以Zuul被配置爲重試通話?
- 有沒有辦法強制Zuul使用REST調用對所有服務器執行ping操作?據我所見,這沒有Spring Cloud端點。發佈到/路線不會做我想要的。
- 如果這是不可能的,當服務器沒有及時響應時,Zuul是否可以配置爲實際發送除200之外的其他內容?
幾個問題... 你究竟是什麼意味着對Zuul的調用失敗,錯誤代碼爲200?你能提供一個示例迴應嗎? 另外,當您將實例上/下時,Zuul(或其他Eureka客戶端)需要一段時間才能知道,因爲客戶端需要刷新Eureka服務器的數據。 Zuul在刷新了Eureka的數據之後是否最終發現實例不再起作用? –
當我關閉容器時,對路由到服務器的現在無法訪問的Zuul調用將返回一個HTTP響應代碼爲200的空白頁面。所以客戶無法知道他可能需要重試。我預計會有504或503. Zuul確實在ping時間間隔(即30秒)後確定某些服務器不再可用,並將它們從LB中刪除。但在這30秒內,電話正在返回空白頁面,這沒有意義。 –
另一方面,Eureka知道服務器何時從註冊表中移除,所以我想知道是否有辦法將該事件掛接到Zuul,以便如果服務器取消註冊,Zuul會得到一個需要刷新的信號其服務器列表。如果在LB中沒有立即提供新服務器,這並不是真正的問題,但是如果您縮減基礎服務並且需要30秒才能趕上LB,那麼這是一個問題,特別是如果有一個系統知道它(尤里卡)。 –