本文主要講解了網(wǎng)關代理單個服務的使用語法,在實際的工作中,服務的相互調用都是依賴于服務中心提供的入口來使用,服務中心往往注冊了很多服務,如果每個服務都需要單獨配置的話,這將是一份很枯燥的工作。Spring Cloud Gateway 提供了一種默認轉發(fā)的能力,只要將 Spring Cloud Gateway 注冊到服務中心,Spring Cloud Gateway 默認就會代理服務中心的所有服務,下面用代碼演示。
在介紹服務網(wǎng)關 zuul 的使用時,提供了 spring-cloud-eureka 、spring-cloud-producer 項目示例,本次演示我們將兩個項目版本升級到 Finchley.SR2 后繼續(xù)演示使用。
spring-cloud-eureka(Eureka Server) 的 pom 文件更改,其它依賴包不變。
升級前:
升級后:
spring-cloud-producer(Eureka Client)的 pom 文件更改。因為配置中心需要作為服務注冊到注冊中心,所以需要升級 Eureka Client,其他依賴沒有變動。
升級前:
升級后:
兩個項目升級完依賴包后依次重啟,訪問注冊中心地址 http://localhost:8000/ 即可看到名為 SPRING-CLOUD-PRODUCER的服務。
復制上一節(jié)的示例項目 cloud-gateway 重新命名為 cloud-gateway-eureka,添加 eureka 的客戶端依賴包。
修改 application.yml 配置文件內(nèi)容如下
spring.cloud.gateway.discovery.locator.enabled:是否與服務注冊于發(fā)現(xiàn)組件進行結合,通過 serviceId 轉發(fā)到具體的服務實例。默認為 false,設為 true 便開啟通過服務中心的自動根據(jù) serviceId 創(chuàng)建路由的功能。
eureka.client.service-url.defaultZone指定注冊中心的地址,以便使用服務發(fā)現(xiàn)功能
logging.level.org.springframework.cloud.gateway 調整相 gateway 包的 log 級別,以便排查問題
修改完成后啟動 cloud-gateway-eureka 項目,訪問注冊中心地址 http://localhost:8000/ 即可看到名為 CLOUD-GATEWAY-EUREKA的服務。
將?Spring?Cloud?Gateway?注冊到服務中心之后,網(wǎng)關會自動代理所有的在注冊中心的服務,訪問這些服務的語法為:http://網(wǎng)關地址:端口/服務中心注冊?serviceId/具體的url
比如我們的 spring-cloud-producer 項目有一個 /hello 的服務,訪問此服務的時候會返回:hello world。
比如訪問地址:http://localhost:9000/hello,頁面返回:hello world!
按照上面的語法我們通過網(wǎng)關來訪問,瀏覽器輸入:http://localhost:8888/SPRING-CLOUD-PRODUCER/hello 同樣返回:hello world!證明服務網(wǎng)關轉發(fā)成功。
我們將項目 spring-cloud-producer 復制一份為 spring-cloud-producer-1,將/hello服務的返回值修改為 hello world smile !,修改端口號為 9001 ,修完完成后重啟,這時候訪問注冊中心后臺會發(fā)現(xiàn)有兩個名為 SPRING-CLOUD-PRODUCER的服務。
在瀏覽器多次訪問地址:http://localhost:8888/SPRING-CLOUD-PRODUCER/hello,頁面交替返回以下信息:
hello?world! hello?world?smile!
說明后端服務自動進行了均衡負載。
在服務網(wǎng)關Zuul高級篇中大概介紹過 Filter 的概念。
Spring Cloud Gateway 的 Filter 的生命周期不像 Zuul 的那么豐富,它只有兩個:“pre” 和 “post”。
PRE: 這種過濾器在請求被路由之前調用。我們可利用這種過濾器實現(xiàn)身份驗證、在集群中選擇請求的微服務、記錄調試信息等。
POST:這種過濾器在路由到微服務以后執(zhí)行。這種過濾器可用來為響應添加標準的 HTTP Header、收集統(tǒng)計信息和指標、將響應從微服務發(fā)送給客戶端等。
Spring Cloud Gateway 的 Filter 分為兩種:GatewayFilter 與 GlobalFilter。GlobalFilter 會應用到所有的路由上,而 GatewayFilter 將應用到單個路由或者一個分組的路由上。
Spring Cloud Gateway 內(nèi)置了9種 GlobalFilter,比如 Netty Routing Filter、LoadBalancerClient Filter、Websocket Routing Filter 等,根據(jù)名字即可猜測出這些 Filter 的作者,具體大家可以參考官網(wǎng)內(nèi)容:Global Filters
利用 GatewayFilter 可以修改請求的 Http 的請求或者響應,或者根據(jù)請求或者響應做一些特殊的限制。 更多時候我們會利用 GatewayFilter 做一些具體的路由配置,下面我們做一些簡單的介紹。
我們以 AddRequestParameter GatewayFilter 來演示一下,如何在項目中使用 GatewayFilter,AddRequestParameter GatewayFilter 可以在請求中添加指定參數(shù)。
application.yml配置示例
這樣就會給匹配的每個請求添加上foo=bar的參數(shù)和值。
我們將以上配置融入到 cloud-gateway-eureka 項目中,完整的 application.yml 文件配置信息如下:
這里的 routes 手動指定了服務的轉發(fā)地址,設置所有的 GET 方法都會自動添加foo=bar,http://localhost:9000 是 spring-cloud-producer 項目,我們在此項目中添加一個 foo() 方法,用來接收轉發(fā)中添加的參數(shù) foo。
修改完成后重啟 cloud-gateway-eureka、spring-cloud-producer 項目。訪問地址http://localhost:9000/foo頁面返回:hello null!,說明并沒有接受到參數(shù) foo;通過網(wǎng)關來調用此服務,瀏覽器訪問地址http://localhost:8888/foo頁面返回:hello bar!,說明成功接收到參數(shù) foo 參數(shù)的值 bar ,證明網(wǎng)關在轉發(fā)的過程中已經(jīng)通過 filter 添加了設置的參數(shù)和值。
上面我們使用 uri 指定了一個服務轉發(fā)地址,單個服務這樣使用問題不大,但是我們在注冊中心往往會使用多個服務來共同支撐整個服務的使用,這個時候我們就期望可以將 Filter 作用到每個應用的實例上,spring cloud gateway 工了這樣的功能,只需要簡單配置即可。
為了測試兩個服務提供者是否都被調用,我們在 spring-cloud-producer-1 項目中也同樣添加 foo() 方法。
為了和 spring-cloud-producer 中 foo() 方法有所區(qū)別,這里使用了兩個感嘆號。同時將 cloud-gateway-eureka 項目配置文件中的 uri 內(nèi)容修改如下:
修改完之后,重新啟動項目 cloud-gateway-eureka、spring-cloud-producer-1,瀏覽器訪問地址:http://localhost:8888/foo頁面交替出現(xiàn):
證明請求依據(jù)均勻轉發(fā)到后端服務,并且后端服務均接收到了 filter 增加的參數(shù) foo 值。
這里其實默認使用了全局過濾器 LoadBalancerClient ,當路由配置中 uri 所用的協(xié)議為 lb 時(以uri: lb://spring-cloud-producer為例),gateway 將使用 LoadBalancerClient 把 spring-cloud-producer 通過 eureka 解析為實際的主機和端口,并進行負載均衡。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。
文章名稱:服務網(wǎng)關SpringCloudGateWay服務化和過濾器-創(chuàng)新互聯(lián)
URL標題:http://jinyejixie.com/article26/dicicg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、App開發(fā)、電子商務、ChatGPT、網(wǎng)站營銷、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)