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

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

這篇具有很好參考價值的文章主要介紹了Spring Cloud Gateway:新一代微服務 API 網(wǎng)關,用起來真優(yōu)雅!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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

1.網(wǎng)關介紹

如果沒有網(wǎng)關,難道不行嗎?功能上是可以的,我們直接調用提供的接口就可以了。那為什么還需要網(wǎng)關?

因為網(wǎng)關的作用不僅僅是轉發(fā)請求而已。我們可以試想一下,如果需要做一個請求認證功能,我們可以接入到 API 服務中。但是倘若后續(xù)又有服務需要接入,我們又需要重復接入。這樣我們不僅代碼要重復編寫,而且后期也不利于維護。

由于接入網(wǎng)關后,網(wǎng)關將轉發(fā)請求。所以在這一層做請求認證,天然合適。這樣這需要編寫一次代碼,在這一層過濾完畢,再轉發(fā)給下面的 API。

所以 API 網(wǎng)關的通常作用是完成一些通用的功能,如請求認證,請求記錄,請求限流,黑白名單判斷等。

API網(wǎng)關是一個服務器,是系統(tǒng)的唯一入口。

API網(wǎng)關方式的核心要點是,所有的客戶端和消費端都通過統(tǒng)一的網(wǎng)關接入微服務,在網(wǎng)關層處理所有的非業(yè)務功能。通常,網(wǎng)關提供REST/HTTP的訪問API。

2.Spring Cloud Gateway介紹

Spring Cloud Gateway是Spring Cloud的新一代API網(wǎng)關,基于WebFlux框架實現(xiàn),它旨在為微服務架構提供一種簡單而有效的統(tǒng)一的API路由管理方式。

Spring Cloud Gateway作為Spring Cloud生態(tài)系統(tǒng)中的網(wǎng)關,目標是替代Netflix ZUUL,具有更好的性能、更強的擴展性、以及更豐富的功能特性,其不僅提供統(tǒng)一的路由方式,并且基于Filter鏈的方式提供了網(wǎng)關基本的功能,例如:安全,監(jiān)控/埋點,限流等。

3.Spring Cloud Gateway的特性

  • 基于Spring Framework 5, Project Reactor和Spring Boot 2.0
  • 動態(tài)路由:能夠匹配任何請求屬性
  • 可以對路由指定 Predicate 和 Filter
  • 集成Hystrix斷路器
  • 集成Spring Cloud DiscoveryClient 服務發(fā)現(xiàn)功能
  • 易于編寫的Predicate和Filter
  • 請求限流
  • 支持路徑重寫

4.Spring Cloud Gateway的三大核心概念

路由(Route): 路由是網(wǎng)關最基礎的部分,路由信息由一個ID,一個目標URI,一組斷言和過濾器組成。路由斷言Predicate用于匹配請求,過濾器Filter用于修改請求和響應。如果斷言為true,則說明請求URI和配置匹配,則執(zhí)行路由。

spring:
  cloud:
    gateway:
      # 定義多個路由
      routes:
      # 一個路由route的id
      - id: path_route
        # 該路由轉發(fā)的目標URI
        uri: https://example.org
        # 路由條件集合
        predicates:
        - Path=/test/**
        # 過濾器集合
        filters:
        - AddRequestHeader=X-Request-Id, 1024
        - AddRequestParameter=color, red

斷言(Predicate): 參考Java8中的斷言Predicate,用于實現(xiàn)請求匹配邏輯,例如匹配路徑、請求頭、請求參數(shù)等。請求與斷言匹配則執(zhí)行該路由。

過濾器(Filter): 指的是Spring框架中GatewayFilter的實例,使用過濾器,可以在請求被路由前后對請求進行修改。

5.Gateway工作流程

客戶端向Spring Cloud Gateway發(fā)出請求,然后在Gateway Handler Mapping中找到與請求相匹配的路由,將其發(fā)送到Gateway Web Handler。Handler再通過指定的過濾器鏈來對請求進行過濾處理,最后發(fā)送到我們實際的服務執(zhí)行業(yè)務邏輯,然后返回。

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

過濾器鏈被虛線分隔,是因為過濾器既可以在轉發(fā)請求前攔截請求,也可以在請求處理之后對響應進行攔截處理。

推薦一個開源免費的 Spring Boot 實戰(zhàn)項目:

https://github.com/javastacks/spring-boot-best-practice

6.Gateway核心配置

依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

啟動類

@SpringBootApplication
@EnableEurekaClient
public class GatewayApplication {

 public static void main(String[] args) {
  SpringApplication.run(GatewayApplication.class, args);
 }

}

application.yml

spring: 
  application:
    name: cloud-gateway 
  cloud:
    gateway:
      routes:
      # 路由的ID,沒有固定規(guī)則但要求唯一,建議配合服務名
      - id: config_route
       # 匹配后提供服務的路由地址
        uri: http://ityouknow.com
        # 斷言,路徑相匹配的條件
        predicates:
        - Path=/routeconfig/rest/**
      - id: header_route
        uri: http://ityouknow.com
        predicates:
        - Header=X-Request-Id, \d+

7.動態(tài)路由

網(wǎng)關接收外部請求,按照一定的規(guī)則,將請求轉發(fā)給其他服務或者應用。如果站在服務調用的角度,網(wǎng)關就扮演著服務消費者的角色,此時,如果再來看看服務調用的目標URI配置,就會很自然的發(fā)現(xiàn)一個問題,服務提供者調用的地址是寫死的,即網(wǎng)關沒有動態(tài)的發(fā)現(xiàn)服務,這就涉及到了服務的自動發(fā)現(xiàn)問題,以及發(fā)現(xiàn)服務后,所涉及到的服務調用的負載均衡的問題。

可以通過Nacos或者Eureka注冊中心動態(tài)發(fā)現(xiàn)服務,通過Ribbon進行服務調用的負載均衡。同樣,Gateway也可以整合Nacos或者Eureka,Ribbon從而實現(xiàn)動態(tài)路由的功能。

想要使用動態(tài)路由的功能,首先要整合注冊中心,這里以Nacos為例

<!--SpringCloud ailibaba nacos -->
<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:
  application:
    name: cloud-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      routes:
        #路由的ID,沒有固定規(guī)則但要求唯一,建議配合服務名
        - id: config_route
  #匹配后提供服務的路由地址, 這里lb之后,跟的是要調用的服務名稱
          uri: lb://nacos-provider-8002
  # 斷言,路徑相匹配的條件
          predicates:
            - Path=/routeconfig/rest/**

此時,當id為config_route的路由規(guī)則匹配某個請求后,在調用該請求對應的服務時,就會從nacos注冊中心自動發(fā)現(xiàn)服務,并在服務調用的時候實現(xiàn)負載均衡。

8.Predicate

在Gateway中,有一些的內置Predicate Factory,有了這些Pridicate Factory,在運行時,Gateway會 自動根據(jù)需要創(chuàng)建其對應的Pridicate對象測試路由條件。

Path 路由斷言 Factory: 根據(jù)請求路徑匹配的路由條件工廠

spring:
  cloud:
    gateway:
      routes:
      - id: path_route
        uri: https://example.org
        predicates:
        # 如果可以匹配的PathPattern有多個,則每個路徑模式以,分開
        - Path=/red/{segment},/blue/{segment}

After 路由斷言 Factory: 在指定日期時間之后發(fā)生的請求都將被匹配

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - After=2017-01-20T17:42:47.789-07:00[America/Denver]

Cookie 路由斷言 Factory: Cookie 路由斷言 Factory有兩個參數(shù),cookie名稱和正則表達式。請求包含此cookie名稱且正則表達式為真的將會被匹配。

spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: https://example.org
        predicates:
        - Cookie=chocolate, ch.p

Header 路由斷言 Factory: Header 路由斷言 Factory有兩個參數(shù),header名稱和正則表達式。請求包含此header名稱且正則表達式為真的將會被匹配。

spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: https://example.org
        predicates:
        - Header=X-Request-Id, \d+

Host 路由斷言 Factory: Host 路由斷言 Factory包括一個參數(shù):host name列表。使用Ant路徑匹配規(guī)則, . 作為分隔符。

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: https://example.org
        predicates:
        - Host=**.somehost.org,**.anotherhost.org

Method 路由斷言 Factory: Method 路由斷言 Factory只包含一個參數(shù):需要匹配的HTTP請求方式

spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: https://example.org
        predicates:
        - Method=GET

自定義Predicate

可以自定義Predicate來實現(xiàn)復雜的路由匹配規(guī)則:

// 實現(xiàn)自定義 Predicate 工廠
// 通過HostRoutePredicateFactory創(chuàng)建Predicate進行路由判斷
@Component
public class MyHostRoutePredicateFactory extends AbstractRoutePredicateFactory<MyHostRoutePredicateFactory.Config> {

  public MyHostRoutePredicateFactory() {
      // Config 類作為 Predicate 的配置參數(shù)類
      super(Config.class);
  }

  public static class Config {
      // 路由匹配規(guī)則
      private String hostName;

      public String getHostName() {
        return hostName;
      }

      public void setHostName(String hostName) {
        this.hostName = hostName; 
      }
  }

  // 生成一個 Predicate 實例
  @Override
  public Predicate<ServerWebExchange> apply(Config config) {
      // 實現(xiàn)匹配邏輯
      return exchange -> {
          // 根據(jù)config實現(xiàn)匹配判斷
          
          String host = exchange.getRequest().getURI().getHost();
          // 匹配配置中的域名
          return host.equals(config.getHostName());
      };
  } 

}

// 使用
RouteLocator locator = new RouteLocatorBuilder(router)
  .routes()
  .route("test_route", r -> r.path("/test")
  .filters(f -> f.filter(new MyHostRoutePredicateFactory.Config("www.test.com")))
  .uri("http://localhost:8080"))
  .build();

9.自定義Filter

可以通過實現(xiàn)GatewayFilter和Ordered接口自定義Filter來實現(xiàn)請求處理邏輯:

@Component
public class TokenFilter implements GatewayFilter, Ordered {

   @Override
   public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
      //請求處理邏輯
      log.info("請求路徑:"+ exchange.getRequest().getPath());
      
      ServerHttpRequest request = exchange.getRequest();
   MultiValueMap<String, HttpCookie> cookies = request.getCookies();
   List<HttpCookie> tokens = cookies.get("access_token");
   if (tokens == null || tokens.size() == 0) {
      throw new RuntimeException("少了cookie!");
   }
      
      return chain.filter(exchange);
   }

   @Override
   public int getOrder() {
      return 0; 
   }

}

10.默認過濾器

Spring Cloud Gateway內置了多種過濾器,例如:

  • AddRequestHeader GatewayFilter:在請求頭中添加參數(shù)
  • PrefixPath GatewayFilter:請求路徑前綴
  • Hystrix GatewayFilter: 斷路器
  • RateLimit GatewayFilter: 限流
  • Retry GatewayFilter: 重試

來源:blog.csdn.net/Cristiano272/article/details/131814765

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2022最新版)

2.勁爆!Java 協(xié)程要來了。。。

3.Spring Boot 2.x 教程,太全了!

4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優(yōu)雅的方式??!

5.《Java開發(fā)手冊(嵩山版)》最新發(fā)布,速速下載!

覺得不錯,別忘了隨手點贊+轉發(fā)哦!文章來源地址http://www.zghlxwxcb.cn/news/detail-705826.html

到了這里,關于Spring Cloud Gateway:新一代微服務 API 網(wǎng)關,用起來真優(yōu)雅!的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 語言接口:探索大模型優(yōu)先架構的新一代 API 設計

    過去的兩三個月里,在開發(fā)基于大語言模型的軟件時,也一直在思考如何設計一個大模型優(yōu)先架構。而隨著越來越多的團隊加入到這場競賽里,我們會發(fā)現(xiàn):基于大語言模型的軟件架構與過去的不同之處,諸如于:我們需要新一代的 API。 我暫時將這一代 API 稱為:語言接口

    2024年02月09日
    瀏覽(27)
  • Spring Cloud之API網(wǎng)關(Gateway)

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

    目錄 API網(wǎng)關 好處 解決方案 Gateway 簡介 特征 核心概念 Route(路由) Predicate(斷言) Filter(過濾器) 工作流程 Route(路由) 路由配置方式 1.yml配置文件路由 2.bean進行配置 3.動態(tài)路由 動態(tài)路由 Predicate(斷言) 特點 常見斷言 示例 Filter(過濾器) filter分類 Pre 類型 Post 類型 網(wǎng)關過濾器 格式

    2024年02月08日
    瀏覽(31)
  • Spring cloud教程Gateway服務網(wǎng)關

    Spring cloud教程Gateway服務網(wǎng)關

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

    2024年02月08日
    瀏覽(31)
  • Spring Cloud第二季--服務網(wǎng)關Gateway

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

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

    2024年02月03日
    瀏覽(24)
  • 構建新一代的K8s原生Java微服務+Quarkus實戰(zhàn)

    構建新一代的K8s原生Java微服務+Quarkus實戰(zhàn)

    送書第一期 《用戶畫像:平臺構建與業(yè)務實踐》 送書活動之抽獎工具的打造 《獲取博客評論用戶抽取幸運中獎者》 送書第二期 《Spring Cloud Alibaba核心技術與實戰(zhàn)案例》 送書第三期 《深入淺出Java虛擬機》 送書第四期 《AI時代項目經(jīng)理成長之道》 送書第五期 《Kubernetes原生

    2024年02月08日
    瀏覽(26)
  • 新一代浪潮K1 Power服務器上市 引領中國關鍵計算產(chǎn)業(yè)發(fā)展

    新一代浪潮K1 Power服務器上市 引領中國關鍵計算產(chǎn)業(yè)發(fā)展

    新一代浪潮高端服務器旗艦產(chǎn)品—— 浪潮K1 Power K8880G3日前正式發(fā)布 !新一代產(chǎn)品采用最新Power10處理器,全面優(yōu)化系統(tǒng)架構設計,整機性能相較上一代產(chǎn)品提升 70%。 浪潮K1 Power K8880G3服務器 一直以來,浪潮K1 Power服務器都是中國關鍵計算的領導者和產(chǎn)業(yè)發(fā)展的風向標,承載各

    2024年02月08日
    瀏覽(24)
  • 微服務·架構組件之網(wǎng)關- Spring Cloud Gateway

    微服務·架構組件之網(wǎng)關- Spring Cloud Gateway

    微服務架構已成為構建現(xiàn)代化應用程序的關鍵范式之一,它將應用程序拆分成多個小型、可獨立部署的服務。Spring Cloud Gateway是Spring Cloud生態(tài)系統(tǒng)中的一個關鍵組件,用于構建和管理微服務架構中的網(wǎng)關。本報告旨在調查和介紹Spring Cloud Gateway的核心概念、架構、功能以及其在

    2024年02月09日
    瀏覽(24)
  • springboot整合spring cloud gateway搭建網(wǎng)關服務

    springboot整合spring cloud gateway搭建網(wǎng)關服務

    spring cloud netflix zuul、spring cloud gateway是最常見的微服務網(wǎng)關,通過網(wǎng)關,我們可以在請求到達后端指定服務之前/后端服務處理完業(yè)務響應數(shù)據(jù)之后對響應進行對請求/響應進行處理。 比如常見的參數(shù)校驗、接口鑒權等等,在后端服務的攔截器和過濾器能做的事在網(wǎng)關都可以做

    2024年02月07日
    瀏覽(25)
  • 微服務網(wǎng)關:Spring Cloud Zuul 升級 Spring Cloud Gateway 的核心要點

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

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

    2024年02月07日
    瀏覽(27)
  • Eureka上集成Spring Cloud 微服務網(wǎng)關 gateway

    Eureka上集成Spring Cloud 微服務網(wǎng)關 gateway

    第一章 Java線程池技術應用 第二章 CountDownLatch和Semaphone的應用 第三章 Spring Cloud 簡介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay API 網(wǎng)關是一個搭建在客戶端和微服務之間的服務,我們可以在 API 網(wǎng)關中

    2024年02月08日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包