日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用Zuul和Spring Boot创建API网关

發(fā)布時(shí)間:2023/12/3 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Zuul和Spring Boot创建API网关 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

介紹

使用微服務(wù)時(shí),通常具有對系統(tǒng)的統(tǒng)一訪問點(diǎn)(也稱為API Gateway )。 消費(fèi)者僅與API網(wǎng)關(guān)交談,而不與服務(wù)直接交談。 這掩蓋了您的系統(tǒng)由多個(gè)較小的服務(wù)組成的事實(shí)。 API網(wǎng)關(guān)還可幫助解決常見的挑戰(zhàn),例如身份驗(yàn)證,管理跨域資源共享( CORS )或請求限制。

Zuul是由Netflix開發(fā)和開源的基于JVM的API網(wǎng)關(guān)。 在本文中,我們將創(chuàng)建一個(gè)小的Spring應(yīng)用程序,其中包括一個(gè)zuul代理,用于將請求路由到其他服務(wù)。

啟用zuul代理

要在項(xiàng)目中使用zuul,我們必須添加spring-cloud-starter-netflix-zuul依賴項(xiàng)。 如果我們要使用spring zuul執(zhí)行器端點(diǎn)(稍后會(huì)詳細(xì)介紹),我們還需要添加spring-boot-starter-actuator依賴項(xiàng)。

< dependency > < groupId >org.springframework.cloud</ groupId > < artifactId >spring-cloud-starter-netflix-zuul</ artifactId > </ dependency > <!-- optional --> < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-actuator</ artifactId > </ dependency >

接下來,我們必須在我們的Spring Boot應(yīng)用程序類(或任何其他spring @Configuration類)中使用@EnableZuulProxy啟用zuul代理。

@SpringBootApplication @EnableZuulProxy public class ZuulDemoApplication { ... }

現(xiàn)在,我們可以開始配置路線了。

配置路線

路由描述了zuul應(yīng)該如何路由傳入的請求。 要配置zuul路由,我們只需要向Spring Boot application.yml (或application.properties )文件添加幾行:

application.yml:

zuul: routes: users: path: /users/** url: https: //users.myapi.com projects: path: /projects/** url: https: //projects.myapi.com

在這里,我們定義了兩個(gè)端點(diǎn)的路由: / users和/ projects : / users的請求將路由到https://users.myapi.com,而/ projects的請求將路由到https://projects.myapi.com 。

假設(shè)我們在本地啟動(dòng)此示例應(yīng)用程序,并將GET請求發(fā)送到http:// localhost:8080 / users / john 。 該請求與zuul路由/ users / **匹配,因此zuul會(huì)將請求轉(zhuǎn)發(fā)至https://users.myapi.com/john 。

當(dāng)使用服務(wù)注冊中心(例如Eureka )時(shí),我們可以替代地配置服務(wù)ID而不是URL:

zuul: routes: users: path: /users/** serviceId: user_service

另一個(gè)有用的選項(xiàng)是sensitiveHeaders ,它使我們可以在將請求路由到另一個(gè)服務(wù)之前刪除標(biāo)頭。 這可以用來避免敏感頭泄漏到外部服務(wù)器(例如,安全令牌或會(huì)話ID)。

zuul: routes: users: path: /users/** url: https: //users.myapi.com sensitiveHeaders: Cookie,Set-Cookie,Authorization

請注意,顯示的示例標(biāo)頭( Cookie,Set-Cookie,Authorization )是sensitiveHeaders屬性的默認(rèn)值。 因此,即使未指定sensitiveHeaders ,也不會(huì)傳遞這些標(biāo)頭。

使用過濾器修改請求/響應(yīng)

我們可以使用過濾器自定義zuul路由。 為了創(chuàng)建一個(gè)zuul過濾器,我們創(chuàng)建一個(gè)新的spring bean(標(biāo)記為@Component),它從ZuulFilter擴(kuò)展:

@Component public class MyFilter extends ZuulFilter { @Override public String filterType() { return FilterConstants.PRE_TYPE; } @Override public int filterOrder() { return FilterConstants.PRE_DECORATION_FILTER_ORDER - 1 ; } @Override public boolean shouldFilter() { return true ; } @Override public Object run() { RequestContext context = RequestContext.getCurrentContext(); context.addZuulRequestHeader( "my-auth-token" , "s3cret" ); return null ; } }

ZuulFilter需要定義四個(gè)方法:

  • 在filterType()中,我們定義過濾器應(yīng)在(PRE_TYPE)實(shí)際路由之前運(yùn)行。 如果我們想在將服務(wù)的響應(yīng)發(fā)送回客戶端之前對其進(jìn)行修改,則可以在此處返回POST_TYPE。
  • 使用filterOrder()我們可以影響過濾器執(zhí)行的順序
  • shouldFilter()指示是否應(yīng)執(zhí)行此過濾器(=調(diào)用run()方法)
  • 在run()中,我們定義實(shí)際的過濾器邏輯。 在這里,我們將簡單的標(biāo)頭my-auth-token添加到路由到另一個(gè)服務(wù)的請求。

過濾器使我們能夠在將請求發(fā)送到指定服務(wù)之前對其進(jìn)行修改,或者在將服務(wù)發(fā)送回客戶端之前修改該服務(wù)的響應(yīng)。

執(zhí)行器端點(diǎn)

Spring cloud zuul暴露了一個(gè)額外的Spring Boot執(zhí)行器端點(diǎn)。 要使用此功能,我們需要在類路徑中有spring-boot-starter-actuator 。

默認(rèn)情況下,執(zhí)行器端點(diǎn)是禁用的。 在application.yml中,我們使用management.endpoints.web.exposure.include屬性啟用特定的執(zhí)行器端點(diǎn):

management: endpoints: web: exposure: include: '*'

在這里,我們僅啟用所有執(zhí)行器端點(diǎn)。 可以在Spring Boot執(zhí)行器文檔中找到更多詳細(xì)的配置選項(xiàng)。

啟用zuul執(zhí)行器端點(diǎn)后,我們可以將GET請求發(fā)送到http:// localhost:8080 / actuator / routes以獲取所有已配置路由的列表。

一個(gè)示例響應(yīng)可能如下所示:

{ "/users/**" : " https://users.myapi.com " , "/projects/**" : "project_service" }

摘要

使用Spring Cloud,您可以輕松地在您的應(yīng)用程序中集成zuul代理。 這使您可以在.yml或.properties文件中配置路由。 可以使用過濾器自定義路由行為。

可以在官方的Spring Cloud zuul文檔中找到有關(guān)spring對zuul的支持的更多詳細(xì)信息。 與往常一樣,您可以在GitHub上找到本文中顯示的示例。

翻譯自: https://www.javacodegeeks.com/2020/01/creating-an-api-gateway-with-zuul-and-spring-boot.html

總結(jié)

以上是生活随笔為你收集整理的使用Zuul和Spring Boot创建API网关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。