国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第八章 Gateway網(wǎng)關(guān)

這篇具有很好參考價值的文章主要介紹了第八章 Gateway網(wǎng)關(guān)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Gateway網(wǎng)關(guān)

gitee:springcloud_study: springcloud:服務(wù)集群、注冊中心、配置中心(熱更新)、服務(wù)網(wǎng)關(guān)(校驗(yàn)、路由、負(fù)載均衡)、分布式緩存、分布式搜索、消息隊(duì)列(異步通信)、數(shù)據(jù)庫集群、分布式日志、系統(tǒng)監(jiān)控鏈路追蹤。

1. 概述簡介

官網(wǎng):Spring Cloud Gateway
第八章 Gateway網(wǎng)關(guān),gateway

Gateway該項(xiàng)目提供了一個構(gòu)建在Spring生態(tài)系統(tǒng)之上的API網(wǎng)關(guān),包括:Spring 5、Spring Boot 2和project Reactor。Spring Cloud Gateway旨在提供一種簡單而有效的方法來路由到API,并為它們提供跨領(lǐng)域的關(guān)注點(diǎn),例如:安全性、監(jiān)控/度量和彈性。SpringCloud Gateway作為 Spring Cloud 生態(tài)系統(tǒng)中的網(wǎng)關(guān),目標(biāo)是替代zuul,在Spring Cloud 2.0以上版本中,沒有對新版本的Zuul 2.0以上最新高性能版本進(jìn)行集成,仍然還是使用的Zuul 1.x非Reactor模式的老版本。而為了提升網(wǎng)關(guān)的性能,SpringCloud Gateway是基于WebFlux框架實(shí)現(xiàn)的,而WebFlux框架底層則使用了高性能的Reactor模式通信框架Netty。 Netty異步非阻塞

Gateway能做反向代理、鑒權(quán)、流量控制、熔斷、日志監(jiān)控...

Gateway特性

基于Spring Framework 5, Project Reactor和Spring Boot 2.0進(jìn)行構(gòu)建;
動態(tài)路由:能夠匹配任何請求屬性;
可以對路由指定Predicate (斷言)和 Filter (過濾器);集成Hystrix的斷路器功能;
集成 Spring Cloud服務(wù)發(fā)現(xiàn)功能;
易于編寫的 Predicate (斷言)和Filter(過濾器);
請求限流功能;
支持路徑重寫。

Gateway與Zuul區(qū)別:

在SpringCloud Finchley 正式版之前,Spring Cloud推薦的網(wǎng)關(guān)是Netflix提供的Zuul:
1、Zuul 1.x,是一個基于阻塞!/O的API Gateway
2、Zuul 1.基于Servlet 2.5使用阻塞架構(gòu)它不支持任何長連接(如WebSocket)zuul的設(shè)計模式和Nginx較像,每次VО操作都是從工作線程中選擇一個執(zhí)行,請求線程被阻塞到工作線程完成,但是差別是Ngink用C++實(shí)現(xiàn),Zuul用Java實(shí)現(xiàn),而JVM本身會有第一次加載較慢的情況,使得Zuul的性能相對較差。
3、Zuul 2.x理念更先進(jìn),想基于Netty非阻塞和支持長連接,但SpringCloud目前還沒有整合。Zuul .x的性能較Zul 1.x有較大提升。在性能方面,根據(jù)官方提供的基準(zhǔn)測試,Spring Cloud Gateway的RPS(每秒請求數(shù))是Zuul的1.6倍。
4、Spring Cloud Gateway建立在Spring Framework 5、Project Reactor和Spring Boot 2之上,使用非阻塞API。
5、Spring Cloud Gateway還支持WebSocket,并且與Spring緊密集成擁有更好的開發(fā)體驗(yàn)

SpringMVC與Spring WebFlux

傳統(tǒng)的Web框架,比如說: struts2,springmvc等都是基于Servlet API與Servlet容器基礎(chǔ)之上運(yùn)行的。但是
在Servlet3.1之后有了異步非阻寒的支持。而WebFlux是一個典型非阻塞異步的框架,它的核心是基于Reactor的相關(guān)API實(shí)現(xiàn)的。相對于傳統(tǒng)的web框架來說,它可以運(yùn)行在諸如Netty,Undertow及支持Servlet3.1的容器上。非阻塞式+函數(shù)式編程(Spring5必須讓你使用java8)
Spring WebFlux是Spring 5.0 引入的新的響應(yīng)式框架,區(qū)別于Spring MVC,它不需要依賴Servlet API,它是完全異步非阻塞的,并且基于Reactor來實(shí)現(xiàn)響應(yīng)式流規(guī)范。

2. 三大核心概念

Router(路由)

Route: The basic building block of the gateway. It is defined by an ID, a destination URI, a collection of predicates, and a collection of filters. A route is matched if the aggregate predicate is true.
路由是構(gòu)建網(wǎng)關(guān)的基本模塊,它由ID,目標(biāo)URI,一系列的斷言和過濾器組成,如果斷言為true則匹配該路由

Predicate(斷言)

Predicate: This is a Java 8 Function Predicate. The input type is a Spring Framework ServerWebExchange. This lets you match on anything from the HTTP request, such as headers or parameters.
參考的是Java8的java.util.function.Predicate
開發(fā)人員可以匹配HTTP請求中的所有內(nèi)容(例如請求頭或請求參數(shù)),如果請求與斷言相匹配則進(jìn)行路由

Filter(過濾)

Filter: These are instances of Spring Framework GatewayFilter that have been constructed with a specific factory. Here, you can modify requests and responses before or after sending the downstream request.
指的是Spring框架中GatewayFilter的實(shí)例,使用過濾器,可以在請求被路由前或者之后對請求進(jìn)行修改。

工作流程原理:

第八章 Gateway網(wǎng)關(guān),gateway

客戶端向 Spring Cloud 網(wǎng)關(guān)發(fā)出請求。如果網(wǎng)關(guān)處理程序映射確定請求與路由匹配,則會將其發(fā)送到網(wǎng)關(guān) Web 處理程序。 此處理程序通過特定于請求的篩選器鏈運(yùn)行請求。 篩選器用虛線劃分的原因是篩選器可以在發(fā)送代理請求之前和之后運(yùn)行邏輯。 執(zhí)行所有“預(yù)”過濾器邏輯。然后發(fā)出代理請求。發(fā)出代理請求后,將運(yùn)行“post”篩選器邏輯。核心邏輯就是路由轉(zhuǎn)發(fā)+執(zhí)行過濾器鏈

3. 入門配置

新建cloud-gateway-gateway9527項(xiàng)目

  1. pom文件

<dependency>
 ? ?<groupId>org.springframework.cloud</groupId>
 ? ?<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
  1. application.yaml

server:
  port: 9527
spring:
  application:
 ?  name: cloud-gateway
eureka:
  instance:
 ?  hostname: cloud-gateway-service
  client:
 ?  service-url:
 ? ?  defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
 ?  register-with-eureka: true
 ?  fetch-registry: true
  1. 主啟動類

@SpringBootApplication
@EnableEurekaClient
public class GatewayMain9527 {
 ? ?public static void main(String[] args) {
 ? ? ? ?SpringApplication.run(GatewayMain9527.class,args);
 ?  }
}
  1. 9527做網(wǎng)關(guān)的路由映射,增加yaml(考慮像eureka一樣直接一個集群注入,不用每一項(xiàng)寫入)

spring:
  application:
 ?  name: cloud-gateway
  cloud:
 ?  gateway:
 ? ?  routes:
 ? ? ?  - id: payment_routh #路由的ID,沒有固定規(guī)則但要求唯一,建議配合服務(wù)名
 ? ? ? ?  uri: http://localhost:8001 #匹配后提供服務(wù)的路由地址
 ? ? ? ?  predicates: #斷言,路徑相匹配的進(jìn)行路由
 ? ? ? ? ?  - Path=/payment/get/**
 ? ? ?  - id: payment_routh2
 ? ? ? ?  uri: http://localhost:8001
 ? ? ? ?  predicates:
 ? ? ? ? ?  - Path=/payment/lb/**
  1. gateway網(wǎng)關(guān)不需要web的jar,去除:

<dependency>
 ? ?<groupId>org.springframework.boot</groupId>
 ? ?<artifactId>spring-boot-starter-web</artifactId>
</dependency>

測試:

第八章 Gateway網(wǎng)關(guān),gateway

代碼中注入RouteLocator的Bean

上面是在yaml中配置,截下來是在代碼中直接注入:

@Configuration
public class GatewayConfig {
 ? ?@Bean
 ? ?public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
 ? ? ? ?RouteLocatorBuilder.Builder builder=routeLocatorBuilder.routes();
 ? ? ? ?builder.route("path_route_yicai",
 ? ? ? ? ? ? ? ?r->r.path("/qq_53957101/article/details/130376180")
 ? ? ? ? ? ? ? ? ? ? ?  .uri("https://blog.csdn.net/")).build();
 ? ? ? ?return builder.build();
 ?  }
}

測試:

第八章 Gateway網(wǎng)關(guān),gateway

后面不穩(wěn)定一下就跳動,建議可以使用自己的項(xiàng)目來做映射。

4. 通過微服務(wù)名實(shí)現(xiàn)動態(tài)路由

默認(rèn)情況下Gateway會根據(jù)注冊中心注冊的服務(wù)列表,以注冊中心上微服務(wù)名為路徑創(chuàng)建動態(tài)路由進(jìn)行轉(zhuǎn)發(fā),從而實(shí)現(xiàn)動態(tài)路由的功能。

yaml文件修改:

spring:
  application:
 ?  name: cloud-gateway
  cloud:
 ?  gateway:
 ? ?  discovery:
 ? ? ?  locator:
 ? ? ? ?  enabled: true #開啟從注冊中心動態(tài)創(chuàng)建路由的功能,利用徼服務(wù)名進(jìn)行路由
 ? ?  routes:
 ? ? ?  - id: payment_routh #路由的ID,沒有固定規(guī)則但要求唯一,建議配合服務(wù)名
# ? ? ? ?  uri: http://localhost:8001 #匹配后提供服務(wù)的路由地址
 ? ? ? ?  uri: lb://cloud-payment-service #匹配后提供服務(wù)的路由地址
 ? ? ? ?  predicates: #斷言,路徑相匹配的進(jìn)行路由
 ? ? ? ? ?  - Path=/payment/get/**
 ? ? ?  - id: payment_routh2
# ? ? ? ?  uri: http://localhost:8001
 ? ? ? ?  uri: lb://cloud-payment-service
 ? ? ? ?  predicates:
 ? ? ? ? ?  - Path=/payment/lb/**

測試:

第八章 Gateway網(wǎng)關(guān),gateway

5. Predicate的使用

第八章 Gateway網(wǎng)關(guān),gateway
第八章 Gateway網(wǎng)關(guān),gateway

1.路由后謂詞工廠采用一個參數(shù),即日期時間。 此謂詞匹配在指定日期時間之后發(fā)生的請求。
2.路由之前謂詞工廠采用一個參數(shù) . 此謂詞匹配在指定的。
3.路由謂詞工廠采用兩個參數(shù),和 。 此謂詞匹配在 之后和之前發(fā)生的請求。參數(shù)必須位于之后。
4.cookie 路由謂詞工廠采用兩個參數(shù),即 cookie 名稱和正則表達(dá)式。 此謂詞匹配具有給定名稱且其值與正則表達(dá)式匹配的 Cookie。
5.標(biāo)頭路由謂詞工廠采用兩個參數(shù),即標(biāo)頭名稱和正則表達(dá)式。 此謂詞與具有給定名稱的標(biāo)頭匹配,該標(biāo)頭的值與正則表達(dá)式匹配。
...

操作:

日期

  1. 闖將一個測試類T2

public class T2 {
 ? ?public static void main(String[] args) {
 ? ? ? ?ZonedDateTime zbj=ZonedDateTime.now();
 ? ? ? ?System.out.println(zbj);
 ?  }
}
  1. 修改配置yaml

  - id: payment_routh2
# ? ? ? ?  uri: http://localhost:8001
 ? ? ? ?  uri: lb://cloud-payment-service
 ? ? ? ?  predicates:
 ? ? ? ? ?  - Path=/payment/lb/**
 ? ? ? ? ?  - After=2023-07-09T10:44:16.126+08:00[Asia/Shanghai]

測試: 一個剛剛:

第八章 Gateway網(wǎng)關(guān),gateway

一個幾小時后:

第八章 Gateway網(wǎng)關(guān),gateway

Cookie

  1. 修改yaml

 ? ? ?  - id: payment_routh2
# ? ? ? ?  uri: http://localhost:8001
 ? ? ? ?  uri: lb://cloud-payment-service
 ? ? ? ?  predicates:
 ? ? ? ? ?  - Path=/payment/lb/**
 ? ? ? ? ?  - Cookie=username,zzyy

使用Curl測試:

第八章 Gateway網(wǎng)關(guān),gateway

Header

  1. 修改yaml

 ? ? ?  - id: payment_routh2
# ? ? ? ?  uri: http://localhost:8001
 ? ? ? ?  uri: lb://cloud-payment-service
 ? ? ? ?  predicates:
 ? ? ? ? ?  - Path=/payment/lb/**
 ? ? ? ? ?  - Header=X-Request-Id,\d+

使用curl測試:

第八章 Gateway網(wǎng)關(guān),gateway

6. Filter的使用

官網(wǎng)自帶

生命周期:pre/post
種類:GatewayFilter/GlobalFilter
  1. yaml修改,添加AddRequestParameter

 ? ? ? ?  filters:
 ? ? ? ? ?  - AddRequestParameter=X-Request-Id,1024 #過濾器工廠會在陣單的請求頭加上一對請求頭,名稱為X-Request-Id值為1024

自定義過濾器(自定義全局GlobalFilter)

@Component
@Slf4j
public class MyLogGatewayFilter implements GlobalFilter, Ordered {
?
 ? ?@Override
 ? ?public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
 ? ? ? ?log.info("*********come in MyLogGlobalGatewayFilter:"+new Date());
 ? ? ? ?String uname=exchange.getRequest().getQueryParams().getFirst("uname");
 ? ? ? ?if(uname==null){
 ? ? ? ? ? ?log.info("非法");
 ? ? ? ? ? ?exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
 ? ? ? ? ? ?return exchange.getResponse().setComplete();
 ? ? ?  }
 ? ? ? ?return chain.filter(exchange);
 ?  }
?
 ? ?@Override
 ? ?public int getOrder() {
 ? ? ? ?return 0;
 ?  }
}

測試:

第八章 Gateway網(wǎng)關(guān),gateway文章來源地址http://www.zghlxwxcb.cn/news/detail-761593.html

到了這里,關(guān)于第八章 Gateway網(wǎng)關(guān)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 兩天學(xué)會微服務(wù)網(wǎng)關(guān)Gateway-Gateway路由規(guī)則

    兩天學(xué)會微服務(wù)網(wǎng)關(guān)Gateway-Gateway路由規(guī)則

    鋒哥原創(chuàng)的微服務(wù)網(wǎng)關(guān)Gateway視頻教程: Gateway微服務(wù)網(wǎng)關(guān)視頻教程(無廢話版)_嗶哩嗶哩_bilibili Gateway微服務(wù)網(wǎng)關(guān)視頻教程(無廢話版)共計17條視頻,包括:1_Gateway簡介、2_Gateway工作原理、3_Gateway HelloWorld快速入門等,UP主更多精彩視頻,請關(guān)注UP賬號。 https://www.bilibili.com

    2024年03月18日
    瀏覽(47)
  • Gateway網(wǎng)關(guān)組件(在Spring Cloud整合Gateway(idea19版本))

    Gateway網(wǎng)關(guān)組件(在Spring Cloud整合Gateway(idea19版本))

    ????????Spring Cloud Gateway官網(wǎng):Spring Cloud Gateway ????????局域網(wǎng)中就有網(wǎng)關(guān)這個概念,局域網(wǎng)接收數(shù)據(jù)或發(fā)送數(shù)據(jù)都要通過網(wǎng)關(guān),比如使用VMware虛擬機(jī)軟件搭建虛擬機(jī)集群的時候,往往我們需要選擇IP段中的?個IP作為網(wǎng)關(guān)地址,網(wǎng)關(guān)可以對請求進(jìn)行控制,提升我們系統(tǒng)的安

    2024年02月16日
    瀏覽(26)
  • 服務(wù)網(wǎng)關(guān)Gateway

    服務(wù)網(wǎng)關(guān)Gateway

    API 網(wǎng)關(guān)出現(xiàn)的原因是微服務(wù)架構(gòu)的出現(xiàn),不同的微服務(wù)一般會有不同的網(wǎng)絡(luò)地址,而外部客戶端可能需要調(diào)用多個服務(wù)的接口才能完成一個業(yè)務(wù)需求,如果讓客戶端直接與各個微服務(wù)通信,會有以下的問題: 破壞了服務(wù)無狀態(tài)特點(diǎn)。 為了保證對外服務(wù)的安全性,我們需要實(shí)

    2024年02月06日
    瀏覽(18)
  • SpringCloud-網(wǎng)關(guān) Gateway

    SpringCloud-網(wǎng)關(guān) Gateway

    ??官方地址:SpringCloud Gateway ??網(wǎng)關(guān)統(tǒng)一了服務(wù)的入口,可以方便實(shí)現(xiàn)對眾多服務(wù)接口進(jìn)行管控,對訪問服務(wù)的身份認(rèn)證,防報文重放與防數(shù)據(jù)篡改,功能調(diào)用的業(yè)務(wù)鑒權(quán),響應(yīng)數(shù)據(jù)的脫敏,流量與并發(fā)控制,甚至基于API調(diào)用的計量或者計費(fèi)等等。更通俗理解,網(wǎng)關(guān)可以

    2024年02月04日
    瀏覽(23)
  • SpringCloud:Gateway服務(wù)網(wǎng)關(guān)

    SpringCloud:Gateway服務(wù)網(wǎng)關(guān)

    網(wǎng)關(guān)(Gateway)是將兩個使用不同協(xié)議的網(wǎng)絡(luò)段連接在一起的設(shè)備。 網(wǎng)關(guān)的作用就是對兩個網(wǎng)絡(luò)段中的使用不同傳輸協(xié)議的數(shù)據(jù)進(jìn)行互相的翻譯轉(zhuǎn)換。 創(chuàng)建服務(wù) 導(dǎo)入依賴 編寫啟動類 添加配置 Route Predicate Factories :: Spring Cloud Gateway 對所有路徑都生效 全局過濾器的作用也是處理

    2024年02月01日
    瀏覽(27)
  • springcloud-網(wǎng)關(guān)(gateway)

    springcloud-網(wǎng)關(guān)(gateway)

    Spring Cloud Gateway旨在提供一種簡單而有效的方式來路由到API,并為其提供跨領(lǐng)域的關(guān)注,如:安全、監(jiān)控/指標(biāo)和容錯 Route(路由) : 網(wǎng)關(guān)的基本構(gòu)件。它由一個 ID 、一個目的地 URI 、一個謂詞( Predicate )集合和一個過濾器( Filter )集合定義。如果集合謂詞為真,則路由被

    2024年02月21日
    瀏覽(16)
  • 微服務(wù)04-Gateway網(wǎng)關(guān)

    微服務(wù)04-Gateway網(wǎng)關(guān)

    身份認(rèn)證 :用戶能不能訪問 服務(wù)路由 :用戶訪問到那個服務(wù)中去 負(fù)載均衡 :一個服務(wù)可能有多個實(shí)例,甚至集群,負(fù)載均衡就是你的請求到哪一個實(shí)例上去 · 請求限流功能 :對請求進(jìn)行流量限制,對服務(wù)進(jìn)行請求限制 流程 : 1.首先咱們先將服務(wù)以及網(wǎng)關(guān)注冊到Nacos注冊

    2024年02月09日
    瀏覽(22)
  • springcloud(gateway網(wǎng)關(guān))

    springcloud(gateway網(wǎng)關(guān))

    目錄 1. gateway簡介 1.1 是什么 1.2 作用 1.3 主要特征 1.4 與zuul的主要區(qū)別 1.5 主要組件 1.6 架構(gòu)圖 2. 開發(fā)示例 2.1 創(chuàng)建一個gateway模塊 2.2 與nacos結(jié)合使用 2.2.1 默認(rèn)規(guī)則 2.2.2 通過配置文件配置路由 2.2.3 動態(tài)路由 SpringCloud Gateway 作為 Spring Cloud 生態(tài)系統(tǒng)中的網(wǎng)關(guān),目標(biāo)是替代 Zuul,在

    2024年02月07日
    瀏覽(21)
  • 微服務(wù)-統(tǒng)一網(wǎng)關(guān)Gateway

    微服務(wù)-統(tǒng)一網(wǎng)關(guān)Gateway

    對用戶請求做身份認(rèn)證、權(quán)限校驗(yàn) 將用戶請求路由到微服務(wù),并實(shí)現(xiàn)負(fù)載均衡 對用戶請求做限流 創(chuàng)建新module,命名為Gateway,引入依賴(1.SpringCloudGateway依賴;2.Eureka客戶端依賴或者nacos的服務(wù)發(fā)現(xiàn)依賴)。在本案例中使用的是Eureka。 配置Application.yml的網(wǎng)關(guān)服務(wù) 路由id:路由

    2024年02月08日
    瀏覽(22)
  • Gateway網(wǎng)關(guān)簡介以及使用

    Gateway網(wǎng)關(guān)簡介以及使用

    官網(wǎng):https://docs.spring.io/spring-cloud-gateway/docs/3.1.3/reference/html/ 1.1. Gateway是什么 Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡單而有效的統(tǒng)一的API路由管理方式。Spring Cloud Gateway作為Spring Clou

    2024年01月21日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包