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

【深入解析spring cloud gateway】04 Global Filters

這篇具有很好參考價值的文章主要介紹了【深入解析spring cloud gateway】04 Global Filters。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

上一節(jié)學(xué)習(xí)了GatewayFilter。
回憶一下一個關(guān)鍵點:
GateWayFilterFactory的本質(zhì)就是:針對配置進行解析,為指定的路由,添加Filter,以便對請求報文進行處理。

一、原理分析

GlobalFilter又是啥?先看一下接口定義

public interface GlobalFilter {
    Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}

再看一下GatewayFilter

public interface GatewayFilter extends ShortcutConfigurable {
    Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}

可以看到GatewayFilter和GlobalFilter方法簽名是一模一樣的,那為啥又要整一個GlobalFilter出來?
GatewayFilter的作用主要是,基于配置文件或者代碼,就是routes那個配置,解析出配置,然后進行報文處理。這個Filter是跟某個route強行綁定的。
GlobalFilter,是直接強制加載的,不屬于某個指定的route。而這個filter需不需要處理,是通過在filter方法中來進行判斷的。如果不需要自己處理,就直接丟給鏈條中下個filter。
請求的處理邏輯,可以看以下代碼
FilteringWebHandler.java

@Override
public Mono<Void> handle(ServerWebExchange exchange) {
    Route route = exchange.getRequiredAttribute(GATEWAY_ROUTE_ATTR);
    List<GatewayFilter> gatewayFilters = route.getFilters();

    List<GatewayFilter> combined = new ArrayList<>(this.globalFilters);
    combined.addAll(gatewayFilters);
    // TODO: needed or cached?
    AnnotationAwareOrderComparator.sort(combined);

    if (logger.isDebugEnabled()) {
        logger.debug("Sorted gatewayFilterFactories: " + combined);
    }

    return new DefaultGatewayFilterChain(combined).filter(exchange);
}

代碼解析:

  • 從配置中獲取route,并取出滿足當前route條件的gatewayFilter
  • GlobalFilter和gatewayFilter合并成一個list,并排序
  • filter封裝成鏈,鏈式處理當前請求

二、如何自定義一個GlobalFilter

@Bean
public GlobalFilter customFilter() {
    return new CustomGlobalFilter();
}

public class CustomGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("custom global filter");
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return -1;
    }
}

三、內(nèi)置的GlobalFilter

3.1 Forward Routing Filter

處理URL格式為:forward:///localendpoint,這種將會被轉(zhuǎn)發(fā)到forward后面的地址
3.2 The LoadBalancerClient Filter
沒看到源碼,本地是 SpringCloud 2021.0.1版本
3.3 The ReactiveLoadBalancerClientFilter
如果URL有?個 lb scheme (如 lb://myservice ),它將使?Spring Cloud ReactorLoadBalancer 將名稱(在前?個示例中為 myservice )解析為實際主機和端?,并替換URI

spring:
  cloud:
    gateway:
      routes:
      - id: myRoute
        uri: lb://service
        predicates:
        - Path=/service/**

3.4 The Netty Routing Filter

如果URL具有http 或https 模式,則會運?Netty Routing Filter。它使?Netty HttpClient 發(fā)出下游代理請求。
響應(yīng)放在ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR exchange屬性中。

3.5 The Netty Write Response Filter

從ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR exchange屬性如果有值,此filter就執(zhí)行,用于寫響應(yīng)報文到緩存。

3.6 The RouteToRequestUrl Filter

如果 ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR exchange屬性中存在 Route 對象RouteToRequestUrlFilter 將運?。它基于請求URI創(chuàng)建?個新的URI,使?Route對象的uri屬性進?更新。新的URI被放置在 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR exchange屬性中。如果該URI有?個前綴scheme,例如lb:ws://serviceid,則會從該URI中剝離該 lb scheme,并將其放置在ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR 中,以便稍后在過濾器鏈中使?。

3.7 The Websocket Routing Filter

如果 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR exchange屬性中有 ws 、 wss scheme,則Websocket Routing Filter將被運?。它使?Spring Web Socket基礎(chǔ)模塊將Websocket轉(zhuǎn)發(fā)到下游。
URI前綴為 lb 的Websockets可以被負載均衡,如 lb:ws://serviceid

spring:
  cloud:
    gateway:
      routes:
      # SockJS route
      - id: websocket_sockjs_route
        uri: http://localhost:3001
        predicates:
        - Path=/websocket/info/**
      # Normal Websocket route
      - id: websocket_route
        uri: ws://localhost:3001
        predicates:
        - Path=/websocket/**

3.8 The Gateway Metrics Filter

要啟??關(guān)指標,請將 spring-boot-starter-actuator 添加為項?依賴項。然后,默認情況下,只要屬性 spring.cloud.gateway.metrics.enabled 未設(shè)置為 false ,?關(guān)指標過濾器就會運?。此過濾器添加名為 spring.cloud.gateway.requests 的計時器指標,并帶有以下標記文章來源地址http://www.zghlxwxcb.cn/news/detail-696295.html

  • routeId: route ID.
  • routeUri: API 將被轉(zhuǎn)發(fā)的URI
  • outcome: 結(jié)果分類,依據(jù) HttpStatus.Series
  • status: 返回client的請求的Http Status
  • httpStatusCode: 返回client的請求的httpStatusCode
  • httpMethod: ?于請求的HTTP?法
    另外通過 spring.cloud.gateway.metrics.tags.path.enabled (默認為false)來激活額外的指標:
  • path:請求的路徑
    這些指標可以從 /actuator/metrics/spring.cloud.gateway.requests 獲取,并且能夠很容易的與Prometheus 集成創(chuàng)建Grafana dashboard。
    注意:要將pometheus啟?,需要添加 micrometer-registry-prometheus 為項?依賴。

到了這里,關(guān)于【深入解析spring cloud gateway】04 Global Filters的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【深入解析spring cloud gateway】08 Reactor 知識掃盲

    【深入解析spring cloud gateway】08 Reactor 知識掃盲

    1.1 背景知識 為了應(yīng)對高并發(fā)服務(wù)器端開發(fā)場景,在2009 年,微軟提出了一個更優(yōu)雅地實現(xiàn)異步編程的方式——Reactive Programming,我們稱之為響應(yīng)式編程。隨后,Netflix 和LightBend 公司提供了RxJava 和Akka Stream 等技術(shù),使得Java 平臺也有了能夠?qū)崿F(xiàn)響應(yīng)式編程的框架。 在2017 年9 月

    2024年02月09日
    瀏覽(14)
  • 【深入解析spring cloud gateway】07 自定義異常返回報文

    【深入解析spring cloud gateway】07 自定義異常返回報文

    Servlet的HttpResponse對象,返回響應(yīng)報文,一般是這么寫的,通過輸出流直接就可以將返回報文輸出。 在filter中如果發(fā)生異常(例如請求參數(shù)不合法),拋出異常信息的時候,調(diào)用方收到的返回碼和body都是Spring Cloud Gateway框架處理來處理的。這一節(jié)我們分析一下,gateway的異常返

    2024年02月10日
    瀏覽(26)
  • 簡單明了!網(wǎng)關(guān)Gateway路由配置filters實現(xiàn)路徑重寫及對應(yīng)正則表達式的解析

    簡單明了!網(wǎng)關(guān)Gateway路由配置filters實現(xiàn)路徑重寫及對應(yīng)正則表達式的解析

    前端需要發(fā)送一個這樣的請求,但出現(xiàn)404 首先解析請求的變化: ?http://www.51xuecheng.cn/api/checkcode/pic 1.請求先打在nginx, www.51xuecheng.cn/api/checkcode/pic 部分匹配到了之后會轉(zhuǎn)發(fā)給網(wǎng)關(guān)進行處理變成 localhost:63010/checkcode/pic ?2.然后再轉(zhuǎn)發(fā)到網(wǎng)關(guān)上,網(wǎng)關(guān)上的路由轉(zhuǎn)發(fā)配置如下圖。然

    2024年02月06日
    瀏覽(36)
  • 【Spring Cloud】深入探索統(tǒng)一網(wǎng)關(guān) Gateway 的搭建,斷言工廠,過濾器工廠,全局過濾器以及跨域問題

    【Spring Cloud】深入探索統(tǒng)一網(wǎng)關(guān) Gateway 的搭建,斷言工廠,過濾器工廠,全局過濾器以及跨域問題

    在微服務(wù)架構(gòu)中,網(wǎng)關(guān)是至關(guān)重要的組件,具有多重職責,為整個系統(tǒng)提供了一系列關(guān)鍵功能。從下面的微服務(wù)結(jié)構(gòu)圖中,我們可以明確網(wǎng)關(guān)的幾項主要作用: 微服務(wù)結(jié)構(gòu)圖: 請求過濾與安全: 用戶的所有請求首先經(jīng)過網(wǎng)關(guān),這使得網(wǎng)關(guān)成為系統(tǒng)的第一道防線。通過對傳入

    2024年02月07日
    瀏覽(24)
  • spring cloud gateway中出現(xiàn)503 spring cloud gateway中出現(xiàn)503

    當搭建網(wǎng)關(guān)模塊的時候出現(xiàn)503的錯誤的最大的可能就是沒有設(shè)置負載均衡的依賴包 ?原先搭建的時候采用的是下面的方式進行設(shè)置的 上面的這種方式可以直接進行注冊和發(fā)現(xiàn),但是要求必須導(dǎo)入下面的依賴 希望簡單的隨筆能夠幫助你!

    2024年02月11日
    瀏覽(88)
  • 【Spring Cloud 八】Spring Cloud Gateway網(wǎng)關(guān)

    【Spring Cloud 八】Spring Cloud Gateway網(wǎng)關(guān)

    【Spring Cloud一】微服務(wù)基本知識 【Spring Cloud 三】Eureka服務(wù)注冊與服務(wù)發(fā)現(xiàn) 【Spring Cloud 四】Ribbon負載均衡 【Spring Cloud 五】OpenFeign服務(wù)調(diào)用 【Spring Cloud 六】Hystrix熔斷 【Spring Cloud 七】Sleuth+Zipkin 鏈路追蹤 在項目中是使用了Gateway做統(tǒng)一的請求的入口,以及統(tǒng)一的跨域處理以及

    2024年02月12日
    瀏覽(28)
  • Spring Cloud Gateway 超時、CORS配置 | Spring Cloud 17

    Spring Cloud Gateway 可以為所有路由配置 Http 超時(響應(yīng)和連接) ,并為每個特定路由覆蓋設(shè)置。 配置全局 http 超時: connect-timeout 必須 以毫秒為單位 指定。 response-timeout 必須指定為 java.time.Duration 使用示例:

    2024年02月14日
    瀏覽(20)
  • Spring Cloud Gateway

    Spring Cloud Gateway

    目錄 一、Spring Cloud Gateway 1、網(wǎng)關(guān)介紹 2、GateWay 3、GateWay項目搭建 4、GateWay配置路由的兩種方式 4.1、YML配置 4.2、配置類 5、GateWay實現(xiàn)負載均衡 5.1、自動負載均衡 5.2、手動負載均衡 6、GateWay斷言Predicate 7、GateWay的Filter ????????在 微服務(wù)架構(gòu) 中,一個 系統(tǒng)會被拆分為很多

    2024年02月10日
    瀏覽(17)
  • 細說 Spring Cloud Gateway

    在微服務(wù)架構(gòu)中,API 網(wǎng)關(guān)是一個非常重要的組件,它可以幫助我們實現(xiàn)服務(wù)的路由、負載均衡、認證授權(quán)等功能。Spring Cloud Gateway 是 Spring Cloud 官方推出的一個基于 Spring 5、Spring Boot 2 和 Project Reactor 的 API 網(wǎng)關(guān)實現(xiàn)。本文將介紹 Spring Cloud Gateway 的基本概念、核心組件以及如何

    2024年02月14日
    瀏覽(24)
  • spring cloud 之 gateway

    spring cloud 之 gateway

    在微服務(wù)架構(gòu)體系中,一個系統(tǒng)會被拆分為很多個微服務(wù),那么作為客戶端要如何去調(diào)用這么多的微服務(wù)呢?如果沒有網(wǎng)關(guān)的存在,我們只能在客戶端記錄每個微服務(wù)的地址,然后分別調(diào)用,當然這樣是不現(xiàn)實的 Kong ???基于Nginx+Lua開發(fā),性能高,穩(wěn)定,有多個可用的插件

    2024年02月12日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包