springcloud教程之服務閘道器zuul基礎篇

2021-12-29 21:39:48 字數 4586 閱讀 5513

springcloud教程之服務閘道器zuul基礎篇。

為什麼需要api gateway

1、簡化客戶端呼叫複雜度

在微服務架構模式下後端服務的例項數一般是動態的,對於客戶端而言很難發現動態改變的服務例項的訪問位址資訊。因此在基於微服務的專案中為了簡化前端的呼叫邏輯,通常會引入api gateway作為輕量級閘道器,同時api gateway中也會實現相關的認證邏輯從而簡化內部服務之間相互呼叫的複雜度。

2、資料裁剪以及聚合

通常而言不同的客戶端對於顯示時對於資料的需求是不一致的,比如手機端或者web端又或者在低延遲的網路環境或者高延遲的網路環境。

因此為了優化客戶端的使用體驗,api gateway可以對通用性的響應資料進行裁剪以適應不同客戶端的使用需求。同時還可以將多個api呼叫邏輯進行聚合,從而減少客戶端的請求數,優化客戶端使用者體驗

3、多渠道支援

當然我們還可以針對不同的渠道和客戶端提供不同的api gateway,對於該模式的使用由另外乙個大家熟知的方式叫backend for front-end, 在backend for front-end模式當中,我們可以針對不同的客戶端分別建立其bff,進一步了解bff可以參考這篇文章:pattern: backends for frontends

4、遺留系統的微服務化改造

對於系統系統而言進行微服務改造通常是由於原有的系統存在或多或少的問題,比如技術債務,**質量,可維護性,可擴充套件性等等。api gateway的模式同樣適用於這一類遺留系統的改造,通過微服務化的改造逐步實現對原有系統中的問題的修復,從而提公升對於原有業務響應力的提公升。通過引入抽象層,逐步使用新的實現替換舊的實現。

在spring cloud體系中, spring cloud zuul就是提供負載均衡、反向**、許可權認證的乙個api gateway。

spring cloud zuul

spring cloud zuul路由是微服務架構的不可或缺的一部分,提供動態路由,監控,彈性,安全等的邊緣服務。zuul是netflix出品的乙個基於jvm路由和服務端的負載均衡器。

下面我們通過**來了解zuul是如何工作的

簡單使用

1、新增依賴

? ?org.springframework.cloud

? ?spring-cloud-starter-zuul

引入?spring-cloud-starter-zuul包

2、配置檔案

spring.application.name=gateway-service-zuul

server.port=8888

#這裡的配置表示,訪問/it/** 直接重定向到

3、啟動類

@springbootapplication

@enablezuulproxy

public class gatewayservicezuulapplication {

? ?public static void main(string args) {

? ? ? ?springapplication.run(gatewayservicezuulapplication.class, args);

啟動類新增?@enablezuulproxy,支援閘道器路由。

史上最簡單的zuul案例就配置完了

4、測試

啟動?gateway-service-zuul-******專案,在瀏覽器中訪問:?http://localhost:8888/it/spring-cloud,看到頁面返回了:?spring-cloud?頁面的資訊,如下:

我們以前面文章的示例**?spring-cloud-producer為例來測試請求的重定向,在配置檔案中新增:

啟動?spring-cloud-producer,重新啟動?gateway-service-zuul-******,訪問:?http://localhost:8888/hello/hello?name=%e5%b0%8f%e6%98%8e,返回:?hello小明,thisisfirst messge

說明訪問?gateway-service-zuul-******的請求自動**到了?spring-cloud-producer,並且將結果返回。

服務化通過url對映的方式來實現zull的**有侷限性,比如每增加乙個服務就需要配置一條內容,另外後端的服務如果是動態來提供,就不能採用這種方案來配置了。實際上在實現微服務架構時,服務名與服務例項位址的關係在eureka server中已經存在了,所以只需要將zuul註冊到eureka server上去發現其他服務,就可以實現對serviceid的對映。

我們結合示例來說明,在上面示例專案?gateway-service-zuul-******的基礎上來改造。

1、新增依賴

? ?org.springframework.cloud

? ?spring-cloud-starter-eureka

增加?spring-cloud-starter-eureka包,新增對eureka的支援。

2、配置檔案

配置修改為:

3、測試

依次啟動?spring-cloud-eureka、?spring-cloud-producer、?gateway-service-zuul-eureka,訪問:?http://localhost:8888/producer/hello?name=%e5%b0%8f%e6%98%8e,返回:?hello小明,thisisfirst messge

說明訪問?gateway-service-zuul-eureka的請求自動**到了?spring-cloud-producer,並且將結果返回。

為了更好的模擬服務集群,我們複製?spring-cloud-producer專案改為?spring-cloud-producer-2,修改?spring-cloud-producer-2專案埠為9001,controller**修改如下:

@restcontroller

public class hellocontroller {

? ?@requestmapping("/hello")

? ?public string index(@requestparam string name) {

? ? ? ?return "hello "+name+",this is two messge";

修改完成後啟動?spring-cloud-producer-2,重啟?gateway-service-zuul-eureka。測試多次訪問?http://localhost:8888/producer/hello?name=%e5%b0%8f%e6%98%8e,依次返回:

hello 小明,this is first messge

hello 小明,this is two messge

hello 小明,this is first messge

hello 小明,this is two messge

說明通過zuul成功呼叫了producer服務並且做了均衡負載。

閘道器的預設路由規則

但是如果後端服務多達十幾個的時候,每乙個都這樣配置也挺麻煩的,spring cloud zuul已經幫我們做了預設配置。預設情況下,zuul會**所有註冊到eureka server的微服務,並且zuul的路由規則如下:?http://zuul_host:zuul_port/微服務在eureka上的serviceid/**會被**到serviceid對應的微服務。

我們登出掉?gateway-service-zuul-eureka專案中關於路由的配置:

#zuul.routes.api-a.path=/producer/**

#zuul.routes.api-a.serviceid=spring-cloud-producer

重新啟動後,訪問?http://localhost:8888/spring-cloud-producer/hello?name=%e5%b0%8f%e6%98%8e,測試返回結果和上述示例相同,說明spirng cloud zuul預設已經提供了**功能。

springcloud學習 eureka服務提供者

上篇博文已經完成註冊中心基本功能,按照上篇博文方式建立新的module,用來配置服務提供者。1 在輸入module名稱時,輸入module名稱為eurekaclient。注意對應配置檔案與上篇的區別 對應的埠號為8010 對應registerwitheureka 表示是否將本應用註冊到eureka服...

springcloud搭建eureka服務

案例建立的工程名為 springcloue parent 02 修改pom檔案 pom org.springframework.cloud spring cloud dependencies greenwich.release pomimport 案例子工程名為 eureka com.yl spri...

SpringCloud 搭建Zuul閘道器服務(七)

閘道器的作用 可以實現負載均衡 路由 日誌 許可權控制 監控 nginx和zuul的區別 閘道器和過濾器的區別 建立springcloud zuul gateway專案將zuul的配置存放在分布式配置中心裡面 引入依賴 org.springframework.cloud spring cloud s...