java Spring Cloud企業快速開發架構之SpringCloud-Eureka的REST API及API擴充套件

畏懼小田發表於2022-01-07

本節我們講解了一些經常用到的配置資訊及 Eureka 的 REST API,透過 API 可以做一些擴充套件。

Eureka REST API 
Eureka 作為註冊中心,其本質是儲存了每個客戶端的註冊資訊,Ribbon 在轉發的時候會獲取註冊中心的服務列表,然後根據對應的路由規則來選擇一個服務給 Feign 來進行呼叫。如果我們不是 Spring Cloud 技術選型,也想用 Eureka,可以嗎?完全可以。

如果不是 Spring Cloud 技術棧,筆者推薦用 Zookeeper,這樣會方便些,當然用 Eureka 也是可以的,這樣的話就會涉及如何註冊資訊、如何獲取註冊資訊等操作。其實 Eureka 也考慮到了這點,提供了很多 REST 介面來給我們呼叫。

我們舉一個比較有用的案例來說明,比如對 Nginx 動態進行 upstream 的配置。

推薦分散式架構原始碼

在架構變成微服務之後,微服務是沒有依賴的,可以獨立部署,埠也可以隨機分配,反正會註冊到註冊中心裡面,呼叫方也無須關心提供方的 IP 和 Port,這些都可以從註冊中心拿到。

但是有一個問題:API 閘道器的部署能這樣嗎?API 閘道器大部分會用 Nginx 作為負載,那麼 Nginx 就必須知道 API 閘道器有哪幾個節點,這樣閘道器服務就不能隨便啟動了,需要固定。

當然閘道器是不會經常變動的,也不會經常釋出,這樣其實也沒什麼大問題,唯一不好的就是不能自動擴容了。

其實利用 Eureka 提供的 API 我們可以獲取某個服務的例項資訊,也就是說我們可以根據 Eureka 中的資料來動態配置 Nginx 的 upstream。

這樣就可以做到閘道器的自動部署和擴容了。網上也有很多的方案,結合 Lua 指令碼來做,或者自己寫 Sheel 指令碼都可以。

下面舉例說明如何獲取 Eureka 中註冊的資訊。具體的介面資訊請檢視官方文件““。

獲取某個服務的註冊資訊,可以直接 GET 請求::8761/eureka/apps/eureka-client-user-service。其中,eureka-client-user-service 是應用名稱,也就是 spring.application.name。

在瀏覽器中,資料的顯示格式預設是 XML 格式的,如圖 1 所示。 

如果想返回 Json資料的格式,可以用一些介面測試工具來請求,比如 Postman,在請求頭中新增下面兩行程式碼即可。

1
Content-Type:application/json Accept:application/json


如果 Eureka 開啟了認證,記得新增認證資訊,使用者名稱和密碼必須是 Base64 編碼過的 Authorization:Basic 使用者名稱:密碼,其餘的介面就不做過多講解了,大家可以自己去嘗試。Postman 直接支援了 Basic 認證,將選項從 Headers 切換到 Authorization,選擇認證方式為 Basic Auth 就可以填寫使用者資訊了。

填寫完之後,直接發起請求就可以了。我們切換到 Headers 選項中,就可以看到請求頭中已經多了一個 Authorization 頭。

後設資料使用 
Eureka 的後設資料有兩種型別,分別是框架定好了的標準後設資料和使用者自定義後設資料。標準後設資料指的是主機名、IP 地址、埠號、狀態頁和健康檢查等資訊,這些資訊都會被髮布在服務登錄檔中,用於服務之間的呼叫。自定義後設資料可以使用 eureka.instance.metadataMap 進行配置。

自定義後設資料說得通俗點就是自定義配置,我們可以為每個 Eureka Client 定義一些屬於自己的配置,這個配置不會影響 Eureka 的功能。

自定義後設資料可以用來做一些擴充套件資訊,比如灰度釋出之類的功能,可以用後設資料來儲存灰度釋出的狀態資料,Ribbon 轉發的時候就可以根據服務的後設資料來做一些處理。當不需要灰度釋出的時候可以呼叫 Eureka 提供的 REST API 將後設資料清除掉。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69994808/viewspace-2851236/,如需轉載,請註明出處,否則將追究法律責任。

相關文章