亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Gateway網(wǎng)關(guān)工作原理及使用方法

 更新時(shí)間:2021年12月03日 17:33:35   作者:AlgoRain  
本文詳細(xì)講解了Gateway網(wǎng)關(guān)工作原理及使用方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1. 什么是 API 網(wǎng)關(guān)(API Gateway)

分布式服務(wù)架構(gòu)、微服務(wù)架構(gòu)與 API 網(wǎng)關(guān)

在微服務(wù)架構(gòu)里,服務(wù)的粒度被進(jìn)一步細(xì)分,各個(gè)業(yè)務(wù)服務(wù)可以被獨(dú)立的設(shè)計(jì)、開(kāi)發(fā)、測(cè)試、部署和管理。這時(shí),各個(gè)獨(dú)立部署單元可以用不同的開(kāi)發(fā)測(cè)試團(tuán)隊(duì)維護(hù),可以使用不同的編程語(yǔ)言和技術(shù)平臺(tái)進(jìn)行設(shè)計(jì),這就要求必須使用一種語(yǔ)言和平 臺(tái)無(wú)關(guān)的服務(wù)協(xié)議作為各個(gè)單元間的通訊方式。

API 網(wǎng)關(guān)的定義

網(wǎng)關(guān)的角色是作為一個(gè) API 架構(gòu),用來(lái)保護(hù)、增強(qiáng)和控制對(duì)于 API 服務(wù)的訪問(wèn)。

API 網(wǎng)關(guān)是一個(gè)處于應(yīng)用程序或服務(wù)(提供 REST API 接口服務(wù))之前的系統(tǒng),用來(lái)管理授權(quán)、訪問(wèn)控制和流量限制等,這樣 REST API 接口服務(wù)就被 API 網(wǎng)關(guān)保護(hù)起來(lái),對(duì)所有的調(diào)用者透明。因此,隱藏在 API 網(wǎng)關(guān)后面的業(yè)務(wù)系統(tǒng)就可以專(zhuān)注于創(chuàng)建和管理服務(wù),而不用去處理這些策略性的基礎(chǔ)設(shè)施。

API 網(wǎng)關(guān)的職能

API 網(wǎng)關(guān)的分類(lèi)與功能

2. Gateway是什么

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技術(shù)開(kāi)發(fā)的網(wǎng)關(guān),Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單而有效的統(tǒng)一的API路由管理方式。Spring Cloud Gateway作為Spring Cloud生態(tài)系中的網(wǎng)關(guān),目標(biāo)是替代ZUUL,其不僅提供統(tǒng)一的路由方式,并且基于Filter鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/埋點(diǎn),和限流等。

3. 為什么用Gateway

Spring Cloud Gateway 可以看做是一個(gè) Zuul 1.x 的升級(jí)版和代替品,比 Zuul 2 更早的使用 Netty 實(shí)現(xiàn)異步 IO,從而實(shí)現(xiàn)了一個(gè)簡(jiǎn)單、比 Zuul 1.x 更高效的、與 Spring Cloud 緊密配合的 API 網(wǎng)關(guān)。

Spring Cloud Gateway 里明確的區(qū)分了 Router 和 Filter,并且一個(gè)很大的特點(diǎn)是內(nèi)置了非常多的開(kāi)箱即用功能,并且都可以通過(guò) SpringBoot 配置或者手工編碼鏈?zhǔn)秸{(diào)用來(lái)使用。

比如內(nèi)置了 10 種 Router,使得我們可以直接配置一下就可以隨心所欲的根據(jù) Header、或者 Path、或者 Host、或者 Query 來(lái)做路由。

比如區(qū)分了一般的 Filter 和全局 Filter,內(nèi)置了 20 種 Filter 和 9 種全局 Filter,也都可以直接用。當(dāng)然自定義 Filter 也非常方便。

最重要的幾個(gè)概念

4. Gateway怎么用

說(shuō)白了 Predicate 就是為了實(shí)現(xiàn)一組匹配規(guī)則,方便讓請(qǐng)求過(guò)來(lái)找到對(duì)應(yīng)的 Route 進(jìn)行處理,接下來(lái)我們接下 Spring Cloud GateWay 內(nèi)置幾種 Predicate 的使用。

通過(guò)時(shí)間匹配

Predicate 支持設(shè)置一個(gè)時(shí)間,在請(qǐng)求進(jìn)行轉(zhuǎn)發(fā)的時(shí)候,可以通過(guò)判斷在這個(gè)時(shí)間之前或者之后進(jìn)行轉(zhuǎn)發(fā)。比如我們現(xiàn)在設(shè)置只有在 2019 年 1 月 1 日才會(huì)轉(zhuǎn)發(fā)到我的網(wǎng)站,在這之前不進(jìn)行轉(zhuǎn)發(fā),我就可以這樣配置:

spring:
  cloud:
    gateway:
      routes:
       - id: time_route
        uri: http://ityouknow.com
        predicates:
         - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]

Spring 是通過(guò) ZonedDateTime 來(lái)對(duì)時(shí)間進(jìn)行的對(duì)比,ZonedDateTime 是 Java 8 中日期時(shí)間功能里,用于表示帶時(shí)區(qū)的日期與時(shí)間信息的類(lèi),ZonedDateTime 支持通過(guò)時(shí)區(qū)來(lái)設(shè)置時(shí)間,中國(guó)的時(shí)區(qū)是:Asia/Shanghai。

After Route Predicate 是指在這個(gè)時(shí)間之后的請(qǐng)求都轉(zhuǎn)發(fā)到目標(biāo)地址。上面的示例是指,請(qǐng)求時(shí)間在 2018 年 1 月 20 日 6 點(diǎn) 6 分 6 秒之后的所有請(qǐng)求都轉(zhuǎn)發(fā)到地址http://ityouknow.com。+08:00是指時(shí)間和 UTC 時(shí)間相差八個(gè)小時(shí),時(shí)間地區(qū)為Asia/Shanghai。

添加完路由規(guī)則之后,訪問(wèn)地址http://localhost:8080會(huì)自動(dòng)轉(zhuǎn)發(fā)到http://ityouknow.com。

Before Route Predicate 剛好相反,在某個(gè)時(shí)間之前的請(qǐng)求的請(qǐng)求都進(jìn)行轉(zhuǎn)發(fā)。我們把上面路由規(guī)則中的 After 改為 Before,如下:

spring:
  cloud:
    gateway:
      routes:
       - id: after_route
        uri: http://ityouknow.com
        predicates:
         - Before=2018-01-20T06:06:06+08:00[Asia/Shanghai]

就表示在這個(gè)時(shí)間之前可以進(jìn)行路由,在這時(shí)間之后停止路由,修改完之后重啟項(xiàng)目再次訪問(wèn)地址http://localhost:8080,頁(yè)面會(huì)報(bào) 404 沒(méi)有找到地址。

除過(guò)在時(shí)間之前或者之后外,Gateway 還支持限制路由請(qǐng)求在某一個(gè)時(shí)間段范圍內(nèi),可以使用 Between Route Predicate 來(lái)實(shí)現(xiàn)。

spring:
  cloud:
    gateway:
      routes:
       - id: after_route
        uri: http://ityouknow.com
        predicates:
         - Between=2018-01-20T06:06:06+08:00[Asia/Shanghai], 2019-01-20T06:06:06+08:00[Asia/Shanghai]

這樣設(shè)置就意味著在這個(gè)時(shí)間段內(nèi)可以匹配到此路由,超過(guò)這個(gè)時(shí)間段范圍則不會(huì)進(jìn)行匹配。通過(guò)時(shí)間匹配路由的功能很酷,可以用在限時(shí)搶購(gòu)的一些場(chǎng)景中。

通過(guò) Cookie 匹配

Cookie Route Predicate 可以接收兩個(gè)參數(shù),一個(gè)是 Cookie name , 一個(gè)是正則表達(dá)式,路由規(guī)則會(huì)通過(guò)獲取對(duì)應(yīng)的 Cookie name 值和正則表達(dá)式去匹配,如果匹配上就會(huì)執(zhí)行路由,如果沒(méi)有匹配上則不執(zhí)行。

spring:
  cloud:
    gateway:
      routes:
       - id: cookie_route
         uri: http://ityouknow.com
         predicates:
         - Cookie=ityouknow, kee.e

使用 curl 測(cè)試,命令行輸入:

curl http://localhost:8080 --cookie "ityouknow=kee.e"

則會(huì)返回頁(yè)面代碼,如果去掉--cookie "ityouknow=kee.e",后臺(tái)匯報(bào) 404 錯(cuò)誤。

Header Route Predicate 和 Cookie Route Predicate 一樣,也是接收 2 個(gè)參數(shù),一個(gè) header 中屬性名稱(chēng)和一個(gè)正則表達(dá)式,這個(gè)屬性值和正則表達(dá)式匹配則執(zhí)行。

spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: http://ityouknow.com
        predicates:
        - Header=X-Request-Id, \d+

使用 curl 測(cè)試,命令行輸入:

curl http://localhost:8080  -H "X-Request-Id:666666" 

則返回頁(yè)面代碼證明匹配成功。將參數(shù)-H "X-Request-Id:666666"改為-H "X-Request-Id:neo"再次執(zhí)行時(shí)返回 404 證明沒(méi)有匹配。

通過(guò) Host 匹配

Host Route Predicate 接收一組參數(shù),一組匹配的域名列表,這個(gè)模板是一個(gè) ant 分隔的模板,用.號(hào)作為分隔符。它通過(guò)參數(shù)中的主機(jī)地址作為匹配規(guī)則。

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://ityouknow.com
        predicates:
        - Host=**.ityouknow.com

使用 curl 測(cè)試,命令行輸入:

curl http://localhost:8080  -H "Host: www.ityouknow.com" 
curl http://localhost:8080  -H "Host: md.ityouknow.com" 

經(jīng)測(cè)試以上兩種 host 均可匹配到 host_route 路由,去掉 host 參數(shù)則會(huì)報(bào) 404 錯(cuò)誤。

通過(guò)請(qǐng)求方式匹配

可以通過(guò)是 POST、GET、PUT、DELETE 等不同的請(qǐng)求方式來(lái)進(jìn)行路由。

spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: http://ityouknow.com
        predicates:
        - Method=GET

使用 curl 測(cè)試,命令行輸入:

# curl 默認(rèn)是以 GET 的方式去請(qǐng)求
curl http://localhost:8080

測(cè)試返回頁(yè)面代碼,證明匹配到路由,我們?cè)僖?POST 的方式請(qǐng)求測(cè)試。

# curl 默認(rèn)是以 GET 的方式去請(qǐng)求
curl -X POST http://localhost:8080

返回 404 沒(méi)有找到,證明沒(méi)有匹配上路由

通過(guò)請(qǐng)求路徑匹配

Path Route Predicate 接收一個(gè)匹配路徑的參數(shù)來(lái)判斷是否走路由。

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://ityouknow.com
        predicates:
        - Path=/foo/{segment}

如果請(qǐng)求路徑符合要求,則此路由將匹配,例如:/foo/1 或者 /foo/bar。

使用 curl 測(cè)試,命令行輸入:

curl http://localhost:8080/foo/1
curl http://localhost:8080/foo/xx
curl http://localhost:8080/boo/xx

經(jīng)過(guò)測(cè)試第一和第二條命令可以正常獲取到頁(yè)面返回值,最后一個(gè)命令報(bào) 404,證明路由是通過(guò)指定路由來(lái)匹配。

通過(guò)請(qǐng)求參數(shù)匹配

Query Route Predicate 支持傳入兩個(gè)參數(shù),一個(gè)是屬性名一個(gè)為屬性值,屬性值可以是正則表達(dá)式。

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: http://ityouknow.com
        predicates:
        - Query=smile

這樣配置,只要請(qǐng)求中包含 smile 屬性的參數(shù)即可匹配路由。

使用 curl 測(cè)試,命令行輸入:

curl localhost:8080?smile=x&id=2

經(jīng)過(guò)測(cè)試發(fā)現(xiàn)只要請(qǐng)求匯總帶有 smile 參數(shù)即會(huì)匹配路由,不帶 smile 參數(shù)則不會(huì)匹配。

還可以將 Query 的值以鍵值對(duì)的方式進(jìn)行配置,這樣在請(qǐng)求過(guò)來(lái)時(shí)會(huì)對(duì)屬性值和正則進(jìn)行匹配,匹配上才會(huì)走路由。

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: http://ityouknow.com
        predicates:
        - Query=keep, pu.

這樣只要當(dāng)請(qǐng)求中包含 keep 屬性并且參數(shù)值是以 pu 開(kāi)頭的長(zhǎng)度為三位的字符串才會(huì)進(jìn)行匹配和路由。

使用 curl 測(cè)試,命令行輸入:

curl localhost:8080?keep=pub

測(cè)試可以返回頁(yè)面代碼,將 keep 的屬性值改為 pubx 再次訪問(wèn)就會(huì)報(bào) 404, 證明路由需要匹配正則表達(dá)式才會(huì)進(jìn)行路由。

通過(guò)請(qǐng)求 ip 地址進(jìn)行匹配

Predicate 也支持通過(guò)設(shè)置某個(gè) ip 區(qū)間號(hào)段的請(qǐng)求才會(huì)路由,RemoteAddr Route Predicate 接受 cidr 符號(hào) (IPv4 或 IPv6) 字符串的列表(最小大小為 1),例如 192.168.0.1/16 (其中 192.168.0.1 是 IP 地址,16 是子網(wǎng)掩碼)。

spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: http://ityouknow.com
        predicates:
        - RemoteAddr=192.168.1.1/24

可以將此地址設(shè)置為本機(jī)的 ip 地址進(jìn)行測(cè)試。

果請(qǐng)求的遠(yuǎn)程地址是 192.168.1.10,則此路由將匹配。

組合使用

上面為了演示各個(gè) Predicate 的使用,我們是單個(gè)單個(gè)進(jìn)行配置測(cè)試,其實(shí)可以將各種 Predicate 組合起來(lái)一起使用。

例如:

spring:
  cloud:
    gateway:
      routes:
       - id: host_foo_path_headers_to_httpbin
        uri: http://ityouknow.com
        predicates:
        - Host=**.foo.org
        - Path=/headers
        - Method=GET
        - Header=X-Request-Id, \d+
        - Query=foo, ba.
        - Query=baz
        - Cookie=chocolate, ch.p
        - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]

各種 Predicates 同時(shí)存在于同一個(gè)路由時(shí),請(qǐng)求必須同時(shí)滿(mǎn)足所有的條件才被這個(gè)路由匹配。

一個(gè)請(qǐng)求滿(mǎn)足多個(gè)路由的謂詞條件時(shí),請(qǐng)求只會(huì)被首個(gè)成功匹配的路由轉(zhuǎn)發(fā)

到此這篇關(guān)于Gateway網(wǎng)關(guān)工作原理及使用方法的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Hadoop 分布式存儲(chǔ)系統(tǒng) HDFS的實(shí)例詳解

    Hadoop 分布式存儲(chǔ)系統(tǒng) HDFS的實(shí)例詳解

    HDFS是Hadoop Distribute File System 的簡(jiǎn)稱(chēng),也就是Hadoop的一個(gè)分布式文件系統(tǒng)。這篇文章主要介紹了Hadoop 分布式存儲(chǔ)系統(tǒng) HDFS,需要的朋友可以參考下
    2019-06-06
  • 教你免費(fèi)做一個(gè)屬于自己穩(wěn)定有效的圖床-PicGo

    教你免費(fèi)做一個(gè)屬于自己穩(wěn)定有效的圖床-PicGo

    由于現(xiàn)在很多寫(xiě)作平臺(tái)都支持了Markdown語(yǔ)法,導(dǎo)致圖床用的人越來(lái)越多。這篇文章主要介紹了如何免費(fèi)做一個(gè)屬于自己穩(wěn)定有效的圖床-PicGo,需要的朋友可以參考下
    2020-01-01
  • 有關(guān)微信的小程序和小游戲的區(qū)別

    有關(guān)微信的小程序和小游戲的區(qū)別

    這篇文章主要介紹了有關(guān)微信的小程序和小游戲的區(qū)別,本文通過(guò)圖文文字相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 初探 SOA(補(bǔ)充)

    初探 SOA(補(bǔ)充)

    SOA是一種應(yīng)用框架,它著眼于日常的業(yè)務(wù)應(yīng)用,并將它們劃分為單獨(dú)的業(yè)務(wù)功能和流程,即所謂的服務(wù)。它使用戶(hù)可以構(gòu)建、部署和整合這些服務(wù),且無(wú)需依賴(lài)應(yīng)用程序及其運(yùn)行計(jì)算平臺(tái),從而提高業(yè)務(wù)流程的靈活性。
    2009-01-01
  • 設(shè)計(jì)引導(dǎo)--一個(gè)鴨子游戲引發(fā)的設(shè)計(jì)理念(多態(tài),繼承,抽象,接口,策略者模式)

    設(shè)計(jì)引導(dǎo)--一個(gè)鴨子游戲引發(fā)的設(shè)計(jì)理念(多態(tài),繼承,抽象,接口,策略者模式)

    設(shè)計(jì)引導(dǎo)--一個(gè)鴨子游戲引發(fā)的設(shè)計(jì)多態(tài),繼承,抽象,接口,策略者模式;這篇博文是從實(shí)際生活中,提煉出來(lái)的設(shè)計(jì)理念,它現(xiàn)在是骨架,現(xiàn)在我加以代碼實(shí)例,完成程序的血肉,以求讓大家活生生的體會(huì)設(shè)計(jì)中的精髓
    2013-01-01
  • 基于 Dubbo Admin 臨時(shí)踢除問(wèn)題服務(wù)實(shí)例步驟

    基于 Dubbo Admin 臨時(shí)踢除問(wèn)題服務(wù)實(shí)例步驟

    服務(wù)在線上運(yùn)行的過(guò)程中,難免遇到某些節(jié)點(diǎn)有問(wèn)題,為了不影響整體服務(wù)的正常運(yùn)行,需要臨時(shí)下線問(wèn)題的服務(wù)實(shí)例,這篇文章主要介紹了基于 Dubbo Admin 臨時(shí)踢除問(wèn)題服務(wù)實(shí)例,需要的朋友可以參考下
    2022-12-12
  • Xshell?6安裝和使用教程詳解

    Xshell?6安裝和使用教程詳解

    這篇文章主要介紹了Xshell?6安裝和使用教程,Xshell 6支持Windows 平臺(tái)遠(yuǎn)程協(xié)議Telnet、Rlogin、SSH1/SSH2 PKCS#11、SFTP、Serial,本文給大家講解的非常詳細(xì)需要的朋友可以參考下
    2022-11-11
  • git版本庫(kù)創(chuàng)建拓展添加文件到版本庫(kù)教程

    git版本庫(kù)創(chuàng)建拓展添加文件到版本庫(kù)教程

    這篇文章主要為大家介紹了git版本庫(kù)創(chuàng)建拓展添加文件到版本庫(kù)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 死鎖問(wèn)題詳解

    死鎖問(wèn)題詳解

    本文詳細(xì)介紹了死鎖,例如死鎖的概念、產(chǎn)生死鎖的條件、如何預(yù)防死鎖等等,有需要的朋友可以自行參考本篇文章,希望對(duì)你有所幫助
    2021-08-08
  • 一個(gè)假冒的序列號(hào)被用來(lái)注冊(cè)Internet?Download?Manager,IDM正在退出的解決辦法

    一個(gè)假冒的序列號(hào)被用來(lái)注冊(cè)Internet?Download?Manager,IDM正在退出的解決辦法

    這篇文章主要介紹了一個(gè)假冒的序列號(hào)被用來(lái)注冊(cè)Internet?Download?Manager?IDM正在退出的解決辦法,在文章末尾給大家分享了序列號(hào)和綠色軟件,大家根據(jù)自身情況選擇,需要的朋友可以參考下
    2023-01-01

最新評(píng)論