本文基于Spring Cloud Greenwich SR2
創(chuàng)新互聯(lián)長期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為臨滄企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,臨滄網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
[TOC]
Spring Cloud Gateway內(nèi)置了一系列的路由謂詞工廠,以便我們可以在開發(fā)中靈活的使用Gateway進(jìn)行請求轉(zhuǎn)發(fā)。我這里將Gateway內(nèi)置的所有路由謂詞工廠整理成了表格,如下:
路由謂詞工廠 | 作用 | 參數(shù) |
---|---|---|
After | 當(dāng)且僅當(dāng)請求時(shí)的時(shí)間After配置的時(shí)間時(shí),才轉(zhuǎn)發(fā)該請求 | 一個(gè)帶有時(shí)區(qū)的具體時(shí)間 |
Before | 當(dāng)且僅當(dāng)請求時(shí)的時(shí)間Before配置的時(shí)間時(shí),才轉(zhuǎn)發(fā)該請求 | 一個(gè)帶有時(shí)區(qū)的具體時(shí)間 |
Between | 當(dāng)且僅當(dāng)請求時(shí)的時(shí)間Between配置的時(shí)間段時(shí),才轉(zhuǎn)發(fā)該請求 | 一個(gè)帶有時(shí)區(qū)的具體時(shí)間段 |
Cookie | 當(dāng)且僅當(dāng)請求時(shí)攜帶的Cookie名稱及值與配置的名稱及值相符時(shí),才轉(zhuǎn)發(fā)該請求 | Cookie的名稱及值,支持使用正則表達(dá)式來匹配值 |
Header | 當(dāng)且僅當(dāng)請求時(shí)攜帶的Header名稱及值與配置的名稱及值相符時(shí),才轉(zhuǎn)發(fā)該請求 | Header的名稱及值,支持使用正則表達(dá)式來匹配值 |
Host | 當(dāng)且僅當(dāng)請求時(shí)名為Host的Header的值與配置的值相符時(shí),才轉(zhuǎn)發(fā)該請求 | Host的值,支持配置多個(gè)且支持使用通配符 |
Method | 當(dāng)且僅當(dāng)請求時(shí)所使用的HTTP方法與配置的請求方法相符時(shí),才轉(zhuǎn)發(fā)該請求 | HTTP請求方法,例如GET、POST等 |
Path | 當(dāng)且僅當(dāng)請求時(shí)所訪問的路徑與配置的路徑相匹配時(shí),才轉(zhuǎn)發(fā)該請求 | 通配符、占位符或具體的接口路徑,可以配置多個(gè) |
Query | 當(dāng)且僅當(dāng)請求時(shí)所帶有的參數(shù)名稱與配置的參數(shù)名稱相符時(shí),才轉(zhuǎn)發(fā)該請求 | 參數(shù)名稱和參數(shù)值(非必須),支持使用正則表達(dá)式對參數(shù)值進(jìn)行匹配 |
RemoteAddr | 當(dāng)且僅當(dāng)請求時(shí)的IP地址與配置的IP地址相符時(shí),才轉(zhuǎn)發(fā)該請求 | IP地址或IP段 |
相關(guān)源碼也整理成了思維導(dǎo)圖:
配置示例:
spring:
cloud:
gateway:
routes:
- id: after_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)請求時(shí)的時(shí)間After配置的時(shí)間時(shí),才轉(zhuǎn)發(fā)該請求
# 若請求時(shí)的時(shí)間不是After配置的時(shí)間時(shí),則會返回404 not found
- After=2018-08-16T11:34:42.917822900+08:00[Asia/Shanghai]
注意:當(dāng)predicates
配置項(xiàng)只配置了一個(gè)Predicate
且沒有配置Path
時(shí),Path
的默認(rèn)值為/**
。所以該段配置會使訪問 GATEWAY_URL/**
時(shí)轉(zhuǎn)發(fā)到 user-center
微服務(wù)的/**
Tips:使用以下代碼可以打印帶有時(shí)區(qū)的當(dāng)前時(shí)間,然后再自行修改成特定時(shí)間即可:
System.out.println(ZonedDateTime.now());
配置示例:
spring:
cloud:
gateway:
routes:
- id: before_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)請求時(shí)的時(shí)間Before配置的時(shí)間時(shí),才轉(zhuǎn)發(fā)該請求
- Before=2018-08-16T11:34:42.917822900+08:00[Asia/Shanghai]
配置示例:
spring:
cloud:
gateway:
routes:
- id: between_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)請求時(shí)的時(shí)間Between配置的時(shí)間段時(shí),才轉(zhuǎn)發(fā)該請求
- Between=2018-08-16T11:34:42.917822900+08:00[Asia/Shanghai], 2028-08-16T11:34:42.917822900+08:00[Asia/Shanghai]
配置示例:
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)請求帶有名為chocolate,并且值符合正則表達(dá)式 ch.p 的Cookie時(shí),才轉(zhuǎn)發(fā)該請求
- Cookie=chocolate, ch.p
配置示例:
spring:
cloud:
gateway:
routes:
- id: header_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)請求帶有名為X-Request-Id,并且值符合正則表達(dá)式 \d+ 的Header時(shí),才轉(zhuǎn)發(fā)該請求
- Header=X-Request-Id, \d+
配置示例:
spring:
cloud:
gateway:
routes:
- id: host_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)名為Host的Header符合**.somehost.org或**.anotherhost.org時(shí),才轉(zhuǎn)發(fā)該請求
# 例如:www.somehost.org、beta.somehost.org、www.anotherhost.org等Host就滿足該匹配
- Host=**.somehost.org,**.anotherhost.org
配置示例:
spring:
cloud:
gateway:
routes:
- id: method_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)HTTP請求方法為GET時(shí),才轉(zhuǎn)發(fā)該請求
- Method=GET
配置示例:
spring:
cloud:
gateway:
routes:
- id: path_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)訪問路徑是/foo/*、/some-example/list及/bar/**時(shí),才轉(zhuǎn)發(fā)該請求
# segment是一個(gè)特殊的占位符,表示單層路徑匹配,而/**則是多層路徑的匹配
- Path=/foo/{segment},/example/list,/bar/**
在Path
中配置的url占位符可以在過濾器工廠通過相關(guān)API進(jìn)行獲取,關(guān)于這個(gè)編程技巧可以參考官方文檔的描述:
配置示例1:
spring:
cloud:
gateway:
routes:
- id: query_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)請求帶有名為baz的參數(shù),才轉(zhuǎn)發(fā)該請求
- Query=baz
配置示例2:
spring:
cloud:
gateway:
routes:
- id: query_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)請求帶有名為foo的參數(shù),且參數(shù)值與正則表達(dá)式 ba. 相匹配,才轉(zhuǎn)發(fā)該請求
- Query=foo, ba.
配置示例:
spring:
cloud:
gateway:
routes:
- id: remoteaddr_route
uri: lb://example-service
predicates:
# 當(dāng)且僅當(dāng)請求IP是192.168.1.1/24網(wǎng)段,例如192.168.1.10,才轉(zhuǎn)發(fā)該請求
- RemoteAddr=192.168.1.1/24
官方文檔:
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站欄目:SpringCloudGateway內(nèi)置的路由謂詞工廠-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://muchs.cn/article36/cecgsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、關(guān)鍵詞優(yōu)化、網(wǎng)站排名、網(wǎng)頁設(shè)計(jì)公司、手機(jī)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)