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

Spring Cloud之API網(wǎng)關(guān)(Gateway)

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

目錄

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

好處

解決方案

Gateway

簡介

特征

核心概念

Route(路由)

Predicate(斷言)

Filter(過濾器)

工作流程

Route(路由)

路由配置方式

1.yml配置文件路由

2.bean進行配置

3.動態(tài)路由

動態(tài)路由

Predicate(斷言)

特點

常見斷言

示例

Filter(過濾器)

filter分類

Pre 類型

Post 類型

網(wǎng)關(guān)過濾器

格式

示例

全局過濾器

示例


在微服務(wù)架構(gòu)中,一個系統(tǒng)由多個微服務(wù)組成,而這些服務(wù)可能部署在不同的地區(qū)、不同的機房,客戶端想要連接,就需要知道它們具體的地址信息;

存在問題:

1.當服務(wù)數(shù)量眾多時,客戶端需要維護大量的服務(wù)地址,這對于客戶端來說,是非常繁瑣的

2.某些情況下存在跨域請求問題

3.認證難度大,每個微服務(wù)需要獨立認證

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

????????網(wǎng)關(guān)是一個搭建在客戶端和微服務(wù)之間的服務(wù),我們可以在 API 網(wǎng)關(guān)中處理一些非業(yè)務(wù)功能的邏輯,例如權(quán)限驗證、監(jiān)控、緩存、請求路由等

????????網(wǎng)關(guān)就像整個微服務(wù)系統(tǒng)的門面一樣,是系統(tǒng)對外的唯一入口。有了它,客戶端會先將請求發(fā)送到 API 網(wǎng)關(guān),然后由 API 網(wǎng)關(guān)根據(jù)請求的標識信息將請求轉(zhuǎn)發(fā)到微服務(wù)實例

Spring Cloud之API網(wǎng)關(guān)(Gateway),Spring Cloud,java,spring,SpringCloud,網(wǎng)關(guān),Gateway

好處

1.網(wǎng)關(guān)與微服務(wù)交互時,客戶端只需要知道網(wǎng)關(guān)地址即可,而不需要維護大量的服務(wù)地址,簡化了客戶端的開發(fā)

2.客戶端直接與網(wǎng)關(guān)通信,能夠減少客戶端與各個服務(wù)的交互次數(shù)

3.客戶端與后端的服務(wù)耦合度降低

4.節(jié)省流量,提高性能,提升用戶體驗

5.網(wǎng)關(guān)還提供了安全、流控、過濾、緩存、計費以及監(jiān)控等 API 管理功能

解決方案

1.gateway

2.zuul

3.kong

4.Nginx+Lua

Gateway

簡介

????????Spring Cloud 團隊基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等技術(shù)開發(fā)的高性能 API 網(wǎng)關(guān)組件;旨在提供一種簡單而有效的途徑來發(fā)送 API,并為它們提供橫切關(guān)注點,例如:安全性,監(jiān)控/指標和彈性

特征

1.基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0 構(gòu)建

2.任意請求屬性上匹配路由

3.斷言 和過濾器是特定于路由的

4.集成了 Hystrix 熔斷器

5.集成了 Spring Cloud DiscoveryClient(服務(wù)發(fā)現(xiàn)客戶端)

6.易于編寫斷言和過濾器

7.能夠限制請求頻率

8.能夠重寫請求路徑

核心概念

gateway最主要的功能就是路由轉(zhuǎn)發(fā),而在定義轉(zhuǎn)發(fā)規(guī)則時主要涉及到三個核心概念

Route(路由)

????????網(wǎng)關(guān)最基本的模塊。它由一個 ID、一個目標 URI、一組斷言(Predicate)和一組過濾器(Filter)組成

Predicate(斷言)

????????路由轉(zhuǎn)發(fā)的判斷條件,我們可以通過 Predicate 對?HTTP 請求進行匹配,例如請求方式、請求路徑、請求頭、參數(shù)等,如果請求與斷言匹配成功,則將請求轉(zhuǎn)發(fā)到相應(yīng)的服務(wù)。

Filter(過濾器)

????????我們可以使用它對請求進行攔截和修改,還可以使用它對上文的響應(yīng)進行再處理

工作流程

Spring Cloud之API網(wǎng)關(guān)(Gateway),Spring Cloud,java,spring,SpringCloud,網(wǎng)關(guān),Gateway

說明:

1.客戶端將請求發(fā)送到gateway

2.gateway通過gateway Handler Mapping找到相匹配得到路由,將其發(fā)送給gateway web Handler

3.gateway web Handler通過指定的過濾器鏈,將請求轉(zhuǎn)發(fā)到實際的服務(wù)節(jié)點中,執(zhí)行業(yè)務(wù)返回響應(yīng)結(jié)果

注意:

1.過濾器之間用虛線分開是因為過濾器可能會在轉(zhuǎn)發(fā)請求之前(pre)或之后(post)執(zhí)行業(yè)務(wù)邏輯

2.過濾器(Filter)可以在請求被轉(zhuǎn)發(fā)到服務(wù)端前,對請求進行攔截和修改,例如參數(shù)校驗、權(quán)限校驗、流量監(jiān)控、日志輸出以及協(xié)議轉(zhuǎn)換等

3.過濾器可以在響應(yīng)返回客戶端之前,對響應(yīng)進行攔截和再處理,例如修改響應(yīng)內(nèi)容或響應(yīng)頭、日志輸出、流量監(jiān)控等。

????????Gateway 的請求需要通過一定的匹配條件,才能定位到真正的服務(wù)節(jié)點。在將請求轉(zhuǎn)發(fā)到服務(wù)進行處理的過程前后(pre 和 post),我們還可以對請求和響應(yīng)進行一些精細化控制。

Route(路由)

????????路由是網(wǎng)關(guān)最基礎(chǔ)的部分,路由信息由一個ID、一個目的URL、一組斷言工廠和一組Filter組成。如果斷言為真,則說明請求URL和配置的路由匹配。

格式:

Spring Cloud之API網(wǎng)關(guān)(Gateway),Spring Cloud,java,spring,SpringCloud,網(wǎng)關(guān),Gateway

id:我們自定義的路由 ID,保持唯一

uri:目標服務(wù)地址

路由配置方式

1.yml配置文件路由
#第一種:ws(websocket)方式: uri: ws://localhost:8888
#第二種:http方式: uri: http://localhost:8888/
#第三種:lb(注冊中心中服務(wù)名字)方式: uri: lb://consumer
spring:
  cloud:
    gateway:
      routes:
         # 路由id,沒有固定規(guī)則,建議配合服務(wù)名
        - id: consumer
          # 匹配后提供服務(wù)的路由地址
          # 需要注意的是uri的協(xié)議為lb,表示啟用Gateway的負載均衡功能。lb://serviceName是spring cloud gateway在微服務(wù)中自動為我們創(chuàng)建的負載均衡uri。
          uri: lb://consumer
          predicates:
          # 斷言:路徑相匹配的進行路由
            - Path=/**
2.bean進行配置
@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator customerRouteLocator(RouteLocatorBuilder routeLocatorBuilder) {
        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
        // 第一個參數(shù)是路由的唯一id
        routes.route("consumer",
                r -> r.path("/hello")
                        .uri("http://localhost:8888/hello")).build();
        return routes.build();
    }
}
3.動態(tài)路由

可以通過服務(wù)名進行轉(zhuǎn)發(fā),無需配置routes也可以轉(zhuǎn)發(fā)

spring:
  application:
    name: gateway
  cloud:
    gateway:
      discovery:
        locator:
          #開啟根據(jù)微服務(wù)名稱自動轉(zhuǎn)發(fā)
          enabled: true
          #小寫
          lower-case-service-id: true

動態(tài)路由

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

形式:

lb://service-name

lb:uri 的協(xié)議,表示開啟 Spring Cloud Gateway 的負載均衡功能。

service-name:服務(wù)名,Spring Cloud Gateway 會根據(jù)它獲取到具體的微服務(wù)地址。

Predicate(斷言)

????????Predicate 斷言來實現(xiàn) Route 路由的匹配規(guī)則。Predicate 是路由轉(zhuǎn)發(fā)的判斷條件,請求只有滿足了 Predicate 的條件,才會被轉(zhuǎn)發(fā)到指定的服務(wù)上進行處理;

特點

1.路由與斷言的關(guān)系為:一對多,一個路由可以包含多個不同斷言

2.一個請求想轉(zhuǎn)發(fā)到指定的路由上,就必須同時匹配路由上的所有斷言

3.當一個請求同時滿足多個路由的斷言條件時,請求只會被首個成功匹配的路由轉(zhuǎn)發(fā)

Spring Cloud之API網(wǎng)關(guān)(Gateway),Spring Cloud,java,spring,SpringCloud,網(wǎng)關(guān),Gateway

常見斷言

Spring Cloud之API網(wǎng)關(guān)(Gateway),Spring Cloud,java,spring,SpringCloud,網(wǎng)關(guān),Gateway

示例

配置文件 application.yml中添加配置內(nèi)容

server:
  port: 9527  #端口號
spring:
  application:
    name: microServiceCloudGateway
  cloud:
    gateway: #網(wǎng)關(guān)路由配置
      routes:
        #將 micro-service-cloud-provider-dept-8001 提供的服務(wù)隱藏起來,不暴露給客戶端,只給客戶端暴露 API 網(wǎng)關(guān)的地址 9527
        - id: provider_dept_list_routh   #路由 id,沒有固定規(guī)則,但唯一,建議與服務(wù)名對應(yīng)
          uri: http://localhost:8001          #匹配后提供服務(wù)的路由地址
          predicates:
            #以下是斷言條件,必選全部符合條件
            - Path=/dept/list/**               #斷言,路徑匹配 注意:Path 中 P 為大寫
            - Method=GET #只能時 GET 請求時,才能訪問

配置中在 spring.cloud.gateway.routes 下使用 predicates 屬性,定義了以下兩個斷言條件:

- Path=/dept/list/*

-Method=GET

HTTP 請求同時滿足以上所有的斷言時,該請求才會被轉(zhuǎn)發(fā)到指定的服務(wù)端中

?

Filter(過濾器)

????????出于安全方面的考慮,服務(wù)端提供的服務(wù)往往都會有一定的校驗邏輯,例如用戶登陸狀態(tài)校驗、簽名校驗等;微服務(wù)架構(gòu)中,系統(tǒng)由多個微服務(wù)組成,所有這些服務(wù)都需要這些校驗邏輯,此時我們就可以將這些校驗邏輯寫到Gateway的 Filter 過濾器中。

filter分類

Gateway 提供了以下兩種類型的過濾器,可以對請求和響應(yīng)進行精細化控制:

Pre 類型

????????這種過濾器在請求被轉(zhuǎn)發(fā)到微服務(wù)之前可以對請求進行攔截和修改,例如參數(shù)校驗、權(quán)限校驗、流量監(jiān)控、日志輸出以及協(xié)議轉(zhuǎn)換等操作。

Post 類型

????????這種過濾器在微服務(wù)對請求做出響應(yīng)后可以對響應(yīng)進行攔截和再處理,例如修改響應(yīng)內(nèi)容或響應(yīng)頭、日志輸出、流量監(jiān)控等。

網(wǎng)關(guān)過濾器

GatewayFilter 是 Gateway 網(wǎng)關(guān)中提供的一種應(yīng)用在單個或一組路由上的過濾器。它可以對單個路由或者一組路由上傳入的請求和傳出響應(yīng)進行攔截,并實現(xiàn)一些與業(yè)務(wù)無關(guān)的功能,比如登陸狀態(tài)校驗、簽名校驗、權(quán)限校驗、日志輸出、流量監(jiān)控等

格式
    spring:
      cloud:
        gateway: 
          routes:
            - id: xxxx
              uri: xxxx
              predicates:
                - Path=xxxx
              filters:
                - AddRequestParameter=X-Request-Id,1024 #過濾器工廠會在匹配的請求頭加上一對請求頭,名稱為 X-Request-Id 值為 1024
                - PrefixPath=/dept #在請求路徑前面加上 /dept
                ……

Gateway 內(nèi)置了多達 31 種 GatewayFilter,下表中列舉了幾種常用的網(wǎng)關(guān)過濾器及其使用示例:

Spring Cloud之API網(wǎng)關(guān)(Gateway),Spring Cloud,java,spring,SpringCloud,網(wǎng)關(guān),Gateway

示例

application.yml 中在添加一個動態(tài)路由:

- id: provider_dept_get_routh

????????uri: lb://MICROSERVICECLOUDPROVIDERDEPT #使用服務(wù)名代替上面的具體帶端口 ????????predicates:

????????????????- Path=/get/**

????????filters:

????????????????- PrefixPath=/dept #在請求路徑上增加一個前綴 /dept

全局過濾器

????????GlobalFilter 是一種作用于所有的路由上的全局過濾器,通過它,我們可以實現(xiàn)一些統(tǒng)一化的業(yè)務(wù)功能,例如權(quán)限認證、IP 訪問限制等。當某個請求被路由匹配時,那么所有的 GlobalFilter 會和該路由自身配置的 GatewayFilter 組合成一個過濾器鏈;

示例

1.新建一個名為?MyGlobalFilter 全局過濾器配置類

/**
* 自定義全局網(wǎng)關(guān)過濾器(GlobalFilter)
*/
@Component
@Slf4j
public class MyGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("進入自定義的全局過濾器 MyGlobalFilter" + new Date());
        String uname = exchange.getRequest().getQueryParams().getFirst("uname");
        if (uname == null) {
            log.info("參數(shù) uname 不能為 null!");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }
    @Override
    public int getOrder() {
        //過濾器的順序,0 表示第一個
        return 0;
    }
}

2.使用瀏覽器訪問“http://eureka7001.com:9527/dept/list”,我們會發(fā)現(xiàn)訪問報 406 錯誤

Spring Cloud之API網(wǎng)關(guān)(Gateway),Spring Cloud,java,spring,SpringCloud,網(wǎng)關(guān),Gateway

3.瀏覽器訪問“http://eureka7001.com:9527/dept/list?uname=123”

Spring Cloud之API網(wǎng)關(guān)(Gateway),Spring Cloud,java,spring,SpringCloud,網(wǎng)關(guān),Gateway文章來源地址http://www.zghlxwxcb.cn/news/detail-716693.html

到了這里,關(guān)于Spring Cloud之API網(wǎng)關(guān)(Gateway)的文章就介紹完了。如果您還想了解更多內(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:新一代微服務(wù) API 網(wǎng)關(guān),用起來真優(yōu)雅!

    Spring Cloud Gateway:新一代微服務(wù) API 網(wǎng)關(guān),用起來真優(yōu)雅!

    如果沒有網(wǎng)關(guān),難道不行嗎?功能上是可以的,我們直接調(diào)用提供的接口就可以了。那為什么還需要網(wǎng)關(guān)? 因為網(wǎng)關(guān)的作用不僅僅是轉(zhuǎn)發(fā)請求而已。我們可以試想一下,如果需要做一個請求認證功能,我們可以接入到 API 服務(wù)中。但是倘若后續(xù)又有服務(wù)需要接入,我們又需要

    2024年02月09日
    瀏覽(27)
  • 【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 網(wǎng)關(guān)

    Spring Cloud 之 Gateway 網(wǎng)關(guān)

    ?? 簡介:java系列技術(shù)分享(??持續(xù)更新中…??) ?? 初衷:一起學習、一起進步、堅持不懈 ?? 如果文章內(nèi)容有誤與您的想法不一致,歡迎大家在評論區(qū)指正?? ?? 希望這篇文章對你有所幫助,歡迎點贊 ?? 收藏 ?留言 ?? ?? 更多文章請點擊 Gateway官網(wǎng) :https://spring.io/projects/

    2024年02月16日
    瀏覽(21)
  • spring cloud gateway網(wǎng)關(guān)(一)之網(wǎng)關(guān)路由

    spring cloud gateway網(wǎng)關(guān)(一)之網(wǎng)關(guān)路由

    1、gateway相關(guān)介紹 在微服務(wù)架構(gòu)中,系統(tǒng)往往由多個微服務(wù)組成,而這些服務(wù)可能部署在不同機房、不同地區(qū)、不同域名下。這種情況下,客戶端(例如瀏覽器、手機、軟件工具等)想要直接請求這些服務(wù),就需要知道它們具體的地址信息,例如 IP 地址、端口號等。這種客戶

    2024年02月08日
    瀏覽(24)
  • Spring Cloud Gateway 監(jiān)控、多網(wǎng)關(guān)實例路由共享 | Spring Cloud 18

    Actuator 是 Spring Boot 提供的用來對應(yīng)用系統(tǒng)進行監(jiān)控的功能模塊,借助于 Actuator 開發(fā)者可以很方便地對應(yīng)用系統(tǒng)某些監(jiān)控指標進行查看、統(tǒng)計等。 Actuator 的核心是端點 Endpoint 。 Endpoint 可以讓我們監(jiān)視應(yīng)用程序并與其交互。 Spring Boot 包含許多內(nèi)置端點,并允許您添加自己的端

    2024年02月09日
    瀏覽(27)
  • Spring cloud教程Gateway服務(wù)網(wǎng)關(guān)

    Spring cloud教程Gateway服務(wù)網(wǎng)關(guān)

    寫在前面的話: 本筆記在參考網(wǎng)上視頻以及博客的基礎(chǔ)上,只做個人學習筆記,如有侵權(quán),請聯(lián)系刪除,謝謝! Spring Cloud Gateway 是 Spring Cloud 的一個全新項目,該項目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等響應(yīng)式編程和事件流技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提

    2024年02月08日
    瀏覽(31)
  • spring cloud gateway網(wǎng)關(guān)和鏈路監(jiān)控

    spring cloud gateway網(wǎng)關(guān)和鏈路監(jiān)控

    文章目錄 目錄 文章目錄 前言 一、網(wǎng)關(guān) 1.1 gateway介紹 1.2 如何使用gateway? 1.3 網(wǎng)關(guān)優(yōu)化 1.4自定義斷言和過濾器 1.4.1 自定義斷言 二、Sleuth--鏈路追蹤 2.1 鏈路追蹤介紹 2.2 Sleuth介紹 2.3 使用 2.4?Zipkin的集成 ?2.5 使用可視化zipkin來監(jiān)控微服務(wù) 總結(jié) 所謂的API網(wǎng)關(guān),就是指系統(tǒng)的 統(tǒng)

    2024年02月02日
    瀏覽(29)
  • Spring Cloud第二季--服務(wù)網(wǎng)關(guān)Gateway

    Spring Cloud第二季--服務(wù)網(wǎng)關(guān)Gateway

    Spring Cloud Gateway是在Spring生態(tài)系統(tǒng)之上構(gòu)建的API網(wǎng)關(guān)服務(wù),基于Spring 5,Spring Boot 2和 Project Reactor等技術(shù)。 Gateway 使用的Webflux中的reactor-netty響應(yīng)式編程組件,底層使用了 Netty 通訊框架。Spring Cloud Gateway能干嘛呢? Gateway是原zuul1.x版的替代。 Spring Cloud Gateway 與 Zuul的區(qū)別: Zuu

    2024年02月03日
    瀏覽(24)
  • 微服務(wù)網(wǎng)關(guān):Spring Cloud Zuul 升級 Spring Cloud Gateway 的核心要點

    微服務(wù)網(wǎng)關(guān):Spring Cloud Zuul 升級 Spring Cloud Gateway 的核心要點

    在routes路由規(guī)則中,根據(jù)path去匹配,如果匹配中,就使用對應(yīng)的路由規(guī)則進行請求轉(zhuǎn)發(fā) 如果無法從routes中匹配,則根據(jù)path用“/”去截取第一段作為服務(wù)名進行請求轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)時,默認將第一段截取調(diào) 如果截取的服務(wù)名不在注冊中心中存在服務(wù),則報錯404 在routes路由規(guī)則中

    2024年02月07日
    瀏覽(27)
  • Spring Cloud Gateway 網(wǎng)關(guān)實現(xiàn)白名單功能

    1 摘要 對于微服務(wù)后臺而言,網(wǎng)關(guān)層作為所有網(wǎng)絡(luò)請求的入口。一般基于安全考慮,會在網(wǎng)關(guān)層做權(quán)限認證,但是對于一些例如登錄、注冊等接口以及一些資源數(shù)據(jù),這些是不需要有認證信息,因此需要在網(wǎng)關(guān)層設(shè)計一個白名單的功能。本文將基于 Spring Cloud Gateway 2.X 實現(xiàn)白

    2023年04月08日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包