2

我是新來的春天雲,並通過一些例子和在線材料,讓自己舒適。然而,在閱讀ZUUL時,一些站點在ZUUL的application.yml中配置了這些路由,其他一些站點提到請求將被轉發到相應的微服務,並且不需要顯式配置路由。我有點困惑。例如,在下面的情況下,配置路線或讓zuul自動路由的方法是什麼?什麼時候配置zuul路由

  1. 假設我有幾個微服務正在運行,並且所有這些服務都與ZUUL一起被註冊到Eureka。
  2. 我有一個前端運行在同一臺服務器的不同端口上,需要與上述微服務進行交互。
  3. 我也有其他很少的應用程序(完全在不同的服務器上運行)需要與上述微服務進行交互以獲取數據。

TIA ..

回答

6

你使用Zuul(哪知道微服務通過尤里卡地址),您的微服務之間轉發請求?如果是這種情況,則使用服務器端負載平衡模式。

如果您使用發現服務(您的情況爲Eureka),我認爲最好的方法是對所有服務間請求(在您的系統內)使用客戶端負載平衡模式。 (你可以使用Ribbon或RestTemplate)。

您可以使用Zuul作爲系統的統一前門,它允許瀏覽器,移動應用程序或其他用戶界面使用來自多個主機的服務,而無需管理每個主機的跨源資源共享(CORS)和身份驗證。

例如:客戶端(移動應用程序)請求所有圖片評論。客戶端不需要知道評論服務地址。只需要代理地址,Zuul會將請求轉發給正確的服務。您可以通過

zuul.routes.comments.path=/comments/** 
zuul.routes.comments.service-id=comments 

application.yml/.properties做到這一點的請求將被GET www.myproxy.mycompany.com/comments。不要忘記你的服務名稱application.yml/.properties是非常重要的(spring.application.name)。這是Zuul路由中的服務標識(它在Eureka中是相同的標識符)。

出於某種原因,您的系統需要請求外部服務(如您在第3個註釋中提到的那樣)。在這種情況下,您的外部服務不是發現客戶端,Zuul無法從Eureka中查找服務ID。您使用路由作爲

zuul.routes.currencyprovider.path=/currencies/** 
zuul.routes.currencyprovider.url=https://currencies.net/ 

與這條路線,都要求/currencies/**從你的服務THROUGH Zuul將完成。用這種方法你可以爲你的系統設置一扇門。這是API Gateway pattern

有時候,您的系統需要彙總來自不同服務的多個結果以響應客戶端請求。你可以在代理服務器上執行此操作(您的情況爲Zuul)。

+0

嗨redoff,感謝您的迴應。它有比我需要更多的信息:)。我有另一個問題。如果我正在使用發現服務(客戶端負載均衡),是否有任何優勢讓zuul根據服務名Vs顯式配置路徑來路由請求? – Harish

+0

當您使用發現服務時,您不是隱式地使用客戶端負載平衡。它是定義服務器端或客戶端LB的服務之間的通信方式。 使用配置路徑的好處是它可以限制只有指定服務的路由(配置路徑)的訪問**如果只添加'zuul.ignored-services = *'。 – redoff

+0

例如:您有3項服務(評論,用戶,指標)。您希望將訪問** THROUGH **代理限制爲1項服務(例如評論服務)。你處理爲:'zuul.ignored-services = *'和'zuul.routes.comments.path =/comments/**''zuul.routes.comments.service-id = comments'。 通過此屬性行,所有請求**直通**代理將被拒絕,除了'www.myproxy.mycompany.com /評論' – redoff