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

Spring Cloud Gateway - 新一代微服務(wù)API網(wǎng)關(guān)

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

Spring Cloud Gateway - 新一代微服務(wù)API網(wǎng)關(guān)

1.網(wǎng)關(guān)介紹

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

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

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

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

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

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

2.Spring Cloud Gateway介紹

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

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

3.Spring Cloud Gateway的特性

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

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

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

spring:
  cloud:
    gateway:
      # 定義多個路由
      routes:
      # 一個路由route的id
      - id: path_route
        # 該路由轉(zhuǎn)發(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ā)送到我們實際的服務(wù)執(zhí)行業(yè)務(wù)邏輯,然后返回。

Spring Cloud Gateway - 新一代微服務(wù)API網(wǎng)關(guān),Java,筆記,微服務(wù),架構(gòu),云原生,java,網(wǎng)關(guān),spring cloud,gateway

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

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ī)則但要求唯一,建議配合服務(wù)名
      - id: config_route
      	# 匹配后提供服務(wù)的路由地址
        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ān)接收外部請求,按照一定的規(guī)則,將請求轉(zhuǎn)發(fā)給其他服務(wù)或者應(yīng)用。如果站在服務(wù)調(diào)用的角度,網(wǎng)關(guān)就扮演著服務(wù)消費者的角色,此時,如果再來看看服務(wù)調(diào)用的目標URI配置,就會很自然的發(fā)現(xiàn)一個問題,服務(wù)提供者調(diào)用的地址是寫死的,即網(wǎng)關(guān)沒有動態(tài)的發(fā)現(xiàn)服務(wù),這就涉及到了服務(wù)的自動發(fā)現(xiàn)問題,以及發(fā)現(xiàn)服務(wù)后,所涉及到的服務(wù)調(diào)用的負載均衡的問題。

可以通過Nacos或者Eureka注冊中心動態(tài)發(fā)現(xiàn)服務(wù),通過Ribbon進行服務(wù)調(diào)用的負載均衡。同樣,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ī)則但要求唯一,建議配合服務(wù)名
        - id: config_route
		#匹配后提供服務(wù)的路由地址, 這里lb之后,跟的是要調(diào)用的服務(wù)名稱
          uri: lb://nacos-provider-8002
		# 斷言,路徑相匹配的條件
          predicates:
            - Path=/routeconfig/rest/**

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

8.Predicate

在Gateway中,有一些的內(nèi)置Predicate Factory,有了這些Pridicate Factory,在運行時,Gateway會 自動根據(jù)需要創(chuàng)建其對應(yī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)復(fù)雜的路由匹配規(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內(nèi)置了多種過濾器,例如:文章來源地址http://www.zghlxwxcb.cn/news/detail-599796.html

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

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

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

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

    2024年02月09日
    瀏覽(27)
  • 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)過濾器 格式

    2024年02月08日
    瀏覽(31)
  • 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第二季--服務(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)
  • 構(gòu)建新一代的K8s原生Java微服務(wù)+Quarkus實戰(zhàn)

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

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

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

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

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

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

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

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

    2024年02月07日
    瀏覽(25)
  • 微服務(wù)·架構(gòu)組件之網(wǎng)關(guān)- Spring Cloud Gateway

    微服務(wù)·架構(gòu)組件之網(wǎng)關(guān)- Spring Cloud Gateway

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

    2024年02月09日
    瀏覽(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)
  • Eureka上集成Spring Cloud 微服務(wù)網(wǎng)關(guān) gateway

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

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

    2024年02月08日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包