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

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

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

Spring cloud教程|Gateway服務網(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 等響應式編程和事件流技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務架構(gòu)提供一種簡單有效的統(tǒng)一的 API 路由管理方式。

1、為什么需要網(wǎng)關(guān)

Gateway網(wǎng)關(guān)是我們服務的守門神,所有微服務的統(tǒng)一入口。

網(wǎng)關(guān)的核心功能特性

  • 請求路由
  • 權(quán)限控制
  • 限流

架構(gòu)圖:

Spring cloud教程Gateway服務網(wǎng)關(guān),Spring Cloud,spring cloud,gateway,java

權(quán)限控制:網(wǎng)關(guān)作為微服務入口,需要校驗用戶是是否有請求資格,如果沒有則進行攔截。

路由和負載均衡:一切請求都必須先經(jīng)過gateway,但網(wǎng)關(guān)不處理業(yè)務,而是根據(jù)某種規(guī)則,把請求轉(zhuǎn)發(fā)到某個微服務,這個過程叫做路由。當然路由的目標服務有多個時,還需要做負載均衡。

限流:當請求流量過高時,在網(wǎng)關(guān)中按照下流的微服務能夠接受的速度來放行請求,避免服務壓力過大。

在SpringCloud中網(wǎng)關(guān)的實現(xiàn)包括兩種:

  • gateway
  • zuul

Zuul是基于Servlet的實現(xiàn),屬于阻塞式編程。而SpringCloudGateway則是基于Spring5中提供的WebFlux,屬于響應式編程的實現(xiàn),具備更好的性能。

2、gateway快速入門

下面,我們就演示下網(wǎng)關(guān)的基本路由功能?;静襟E如下:

  1. 創(chuàng)建SpringBoot工程gateway,引入網(wǎng)關(guān)依賴
  2. 編寫啟動類
  3. 編寫基礎(chǔ)配置和路由規(guī)則
  4. 啟動網(wǎng)關(guān)服務進行測試

1、引入網(wǎng)關(guān)依賴

<!--網(wǎng)關(guān)-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

2、編寫啟動類

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

3、配置路由規(guī)則

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.192.128:8848
    gateway:
      routes: # 網(wǎng)關(guān)路由配置
       - id: nacos-consumer # 路由id,自定義,只要唯一即可
         uri: lb://nacos-consumer # 路由的目標地址 lb就是負載均衡,后面跟服務名稱
         predicates: # 路由斷言,也就是判斷請求是否符合路由規(guī)則的條件
           - Path=/hello/** # 這個是按照路徑匹配,只要以/hello/開頭就符合要求

我們將符合Path 規(guī)則的一切請求,都代理到 uri參數(shù)指定的地址。

本例中,我們將 /hello/**開頭的請求,代理到lb://userservice,lb是負載均衡,根據(jù)服務名拉取服務列表,實現(xiàn)負載均衡。

4、重啟測試

http://localhost:10010/hello/sayHi/zhagnsan

訪問流程如下:

Spring cloud教程Gateway服務網(wǎng)關(guān),Spring Cloud,spring cloud,gateway,java

總結(jié):

網(wǎng)關(guān)搭建步驟:

  1. 創(chuàng)建項目,引入nacos服務發(fā)現(xiàn)和gateway依賴

  2. 配置application.yml,包括服務基本信息、nacos地址、路由

路由配置包括:

  1. 路由id:路由的唯一標示

  2. 路由目標(uri):路由的目標地址,http代表固定地址,lb代表根據(jù)服務名負載均衡

  3. 路由斷言(predicates):判斷路由的規(guī)則,

  4. 路由過濾器(filters):對請求或響應做處理

3、斷言工廠

我們在配置文件中寫的斷言規(guī)則只是字符串,這些字符串會被Predicate Factory讀取并處理,轉(zhuǎn)變?yōu)槁酚膳袛嗟臈l件

例如Path=/user/**是按照路徑匹配,這個規(guī)則是由

org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory類來

處理的,像這樣的斷言工廠在SpringCloudGateway還有十幾個:

名稱 說明 示例
After 是某個時間點后的請求 - After=2037-01-20T17:42:47.789-07:00[America/Denver]
Before 是某個時間點之前的請求 - Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]
Between 是某兩個時間點之前的請求 - Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver]
Cookie 請求必須包含某些cookie - Cookie=chocolate, ch.p
Header 請求必須包含某些header - Header=X-Request-Id, \d+
Host 請求必須是訪問某個host(域名) - Host=.somehost.org,.anotherhost.org
Method 請求方式必須是指定方式 - Method=GET,POST
Path 請求路徑必須符合指定規(guī)則 - Path=/red/{segment},/blue/**
Query 請求參數(shù)必須包含指定參數(shù) - Query=name, Jack或者- Query=name
RemoteAddr 請求者的ip必須是指定范圍 - RemoteAddr=192.168.1.1/24
Weight 權(quán)重處理

我們只需要掌握Path這種路由工程就可以了。

4、過濾器工廠

GatewayFilter是網(wǎng)關(guān)中提供的一種過濾器,可以對進入網(wǎng)關(guān)的請求和微服務返回的響應做處理:

Spring cloud教程Gateway服務網(wǎng)關(guān),Spring Cloud,spring cloud,gateway,java

4.1.路由過濾器的種類

Spring提供了31種不同的路由過濾器工廠。例如:

名稱 說明
AddRequestHeader 給當前請求添加一個請求頭
RemoveRequestHeader 移除請求中的一個請求頭
AddResponseHeader 給響應結(jié)果中添加一個響應頭
RemoveResponseHeader 從響應結(jié)果中移除有一個響應頭
RequestRateLimiter 限制請求的流量

? 以請求過濾頭AddRequestHeader 為例:

給所有進入nacos-consumer的請求添加一個請求頭: Hello World !

只需要修改gateway服務的application.yml文件,添加路由過濾即可:

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.192.128:8848
    gateway:
      routes: # 網(wǎng)關(guān)路由配置
       - id: nacos-consumer # 路由id,自定義,只要唯一即可
         uri: lb://nacos-consumer # 路由的目標地址 lb就是負載均衡,后面跟服務名稱
         predicates: # 路由斷言,也就是判斷請求是否符合路由規(guī)則的條件
           - Path=/hello/** # 這個是按照路徑匹配,只要以/hello/開頭就符合要求
         filters:
           - AddRequestHeader=Truth, Hello the World! # 添加請求頭 鍵值對 k,v
             #當前過濾器寫在nacos-consumer路由下,因此僅僅對訪問nacos-consumer的請求有效。

當前過濾器寫在userservice路由下,因此僅僅對訪問userservice的請求有效

在請求的方法參數(shù)添加@RequestHeader 注解即可獲取請求頭參數(shù)

@RequestMapping("getConfig")
public String getConfig(@RequestHeader(value = "truth",required = false) String truth){
    System.out.println(truth);
    return serviceFeginClient.getConfig();
}

如果要對所有的路由都生效,則可以將過濾器工廠寫到default下。格式如下:

spring:
  cloud:
    gateway:
      routes:
      - id: nacos-consumer 
        uri: lb://nacos-consumer
        predicates: 
        - Path=/hello/**
      default-filters: # 默認過濾項
      - AddRequestHeader=Truth, Hello the World! 

總結(jié)

過濾器的作用是什么?

① 對路由的請求或響應做加工處理,比如添加請求頭

② 配置在路由下的過濾器只對當前路由的請求生效

defaultFilters的作用是什么?

① 對所有路由都生效的過濾器

4.2、全局過濾器

上面列出的過濾器,網(wǎng)關(guān)提供了31種,但每一種過濾器的作用都是固定的。如果我們希望攔截請求,做自己的業(yè)務邏輯則沒辦法實現(xiàn)。

? 全局過濾器的作用也是處理一切進入網(wǎng)關(guān)的請求和微服務響應,與GatewayFilter的作用一樣。區(qū)別在于GatewayFilter通過配置定義,處理邏輯是固定的;而GlobalFilter的邏輯需要自己寫代碼實現(xiàn)。

定義方式是實現(xiàn)GlobalFilter接口。

public interface GlobalFilter {
    /**
     *  處理當前請求,有必要的話通過{@link GatewayFilterChain}將請求交給下一個過濾器處理
     *
     * @param exchange 請求上下文,里面可以獲取Request、Response等信息
     * @param chain 用來把請求委托給下一個過濾器 
     * @return {@code Mono<Void>} 返回標示當前過濾器業(yè)務結(jié)束
     */
    Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}

在filter中編寫自定義邏輯,可以實現(xiàn)下列功能:

  • 登錄狀態(tài)判斷
  • 權(quán)限校驗
  • 請求限流等

需求:定義全局過濾器,攔截請求,判斷請求的參數(shù)是否滿足下面條件:

  • 參數(shù)中是否有authorization,

  • authorization參數(shù)值是否為admin

如果同時滿足則放行,否則攔截

實現(xiàn):

在gateway中定義一個過濾器:

package cn.itcast.gateway.filters;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Order(-1) //執(zhí)行順序
@Component
public class AuthorizeFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 1.獲取請求參數(shù)
        MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();
        // 2.獲取authorization參數(shù)
        String auth = params.getFirst("authorization");
        // 3.校驗
        if ("admin".equals(auth)) {
            // 放行
            return chain.filter(exchange);
        }
        // 4.攔截
        // 4.1.禁止訪問,設(shè)置狀態(tài)碼
        exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
        // 4.2.結(jié)束處理
        return exchange.getResponse().setComplete();
    }
}

4.3、過濾器執(zhí)行順序

請求進入網(wǎng)關(guān)會碰到三類過濾器:當前路由的過濾器、DefaultFilter、GlobalFilter

請求路由后,會將當前路由過濾器和DefaultFilter、GlobalFilter,合并到一個過濾器鏈(集合)中,排序后依次執(zhí)行每個過濾器

Spring cloud教程Gateway服務網(wǎng)關(guān),Spring Cloud,spring cloud,gateway,java

排序的規(guī)則是什么呢?

  • 每一個過濾器都必須指定一個int類型的order值,order值越小,優(yōu)先級越高,執(zhí)行順序越靠前。
  • GlobalFilter通過實現(xiàn)Ordered接口,或者添加@Order注解來指定order值,由我們自己指定
  • 路由過濾器和defaultFilter的order由Spring指定,默認是按照聲明順序從1遞增。
  • 當過濾器的order值一樣時,會按照 defaultFilter > 路由過濾器 > GlobalFilter的順序執(zhí)行

詳細內(nèi)容,可以查看源碼:

org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getFilters()方法是先加載defaultFilters,然后再加載某個route的filters,然后合并。

org.springframework.cloud.gateway.handler.FilteringWebHandler#handle()方法會加載全局過濾器,與前面的過濾器合并后根據(jù)order排序,組織過濾器鏈

4.3、跨域問題

跨域:域名不一致就是跨域,主要包括:

  • 域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com
  • 域名相同,端口不同:localhost:8080和localhost8081

跨域問題:瀏覽器禁止請求的發(fā)起者與服務端發(fā)生跨域ajax請求,請求被瀏覽器攔截的問題

解決方案:CORS,參考: https://www.ruanyifeng.com/blog/2016/04/cors.html

在gateway服務的application.yml文件中,添加下面的配置:文章來源地址http://www.zghlxwxcb.cn/news/detail-719488.html

spring:
  cloud:
    gateway:
      # 。。。
      globalcors: # 全局的跨域處理
        add-to-simple-url-handler-mapping: true # 解決options請求被攔截問題
        corsConfigurations:
          '[/**]':
            allowedOrigins: # 允許哪些網(wǎng)站的跨域請求 
              - "http://localhost:8090"
            # allowedOrigins: "*" # 跨域處理 允許所有的域
            allowedMethods: # 允許的跨域ajax的請求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允許在請求中攜帶的頭信息
            allowCredentials: true # 是否允許攜帶cookie
            maxAge: 360000 # 這次跨域檢測的有效期

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

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

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

相關(guān)文章

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

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

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

    2024年02月08日
    瀏覽(23)
  • 【springcloud 微服務】Spring Cloud 微服務網(wǎng)關(guān)Gateway使用詳解

    目錄 一、微服務網(wǎng)關(guān)簡介 1.1 網(wǎng)關(guān)的作用 1.2 常用網(wǎng)關(guān) 1.2.1 傳統(tǒng)網(wǎng)關(guān) 1.2.2?云原生網(wǎng)關(guān)

    2023年04月16日
    瀏覽(30)
  • Spring Cloud Gateway - 新一代微服務API網(wǎng)關(guān)

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

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

    2024年02月16日
    瀏覽(27)
  • Spring Cloud Gateway:打造可擴展的微服務網(wǎng)關(guān)

    Spring Cloud Gateway:打造可擴展的微服務網(wǎng)關(guān)

    ??歡迎來到架構(gòu)設(shè)計專欄~Spring Cloud Gateway:打造可擴展的微服務網(wǎng)關(guān) ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁:IT·陳寒的博客 ??該系列文章專欄:架構(gòu)設(shè)計 ??其他專欄:Java學習路線 Java面試技巧 Java實戰(zhàn)項目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學習 ??文章作者技術(shù)和水平有限

    2024年02月08日
    瀏覽(91)
  • Spring Cloud Gateway 服務網(wǎng)關(guān)的部署與使用詳細介紹

    Spring Cloud Gateway 服務網(wǎng)關(guān)的部署與使用詳細介紹

    1、什么是服務網(wǎng)關(guān): ????????傳統(tǒng)的單體架構(gòu)中只需要開放一個服務給客戶端調(diào)用,但是微服務架構(gòu)中是將一個系統(tǒng)拆分成多個微服務,如果沒有網(wǎng)關(guān),客戶端只能在本地記錄每個微服務的調(diào)用地址,當需要調(diào)用的微服務數(shù)量很多時,它需要了解每個服務的接口,這個工

    2024年02月02日
    瀏覽(26)
  • Spring Cloud 微服務中 gateway 網(wǎng)關(guān)如何設(shè)置健康檢測端點

    Spring Cloud 微服務中 gateway 網(wǎng)關(guān)如何設(shè)置健康檢測端點

    主要是為了讓 k8s 識別到網(wǎng)關(guān)項目已經(jīng)就緒,但是又不想在里面通過 Controller 實現(xiàn)。因為在 Controller 中這樣做并不是最佳實踐,因為 Gateway 的設(shè)計初衷是專注于路由和過濾,而不是業(yè)務邏輯的處理。 在 Gateway 中配置健康檢查端點可以通過以下方式進行(可根據(jù)實際需求進行擴

    2024年01月17日
    瀏覽(24)
  • Spring Cloud Alibaba全家桶(十)——微服務網(wǎng)關(guān)Gateway組件

    Spring Cloud Alibaba全家桶(十)——微服務網(wǎng)關(guān)Gateway組件

    本文小新為大家?guī)?微服務網(wǎng)關(guān)Gateway組件 相關(guān)知識,具體內(nèi)容包括 微服務網(wǎng)關(guān)Gateway組件 (包括: Gateway核心概念 , Gateway工作原理 ), Spring Cloud Gateway環(huán)境搭建 , 路由斷言工廠(Route Predicate Factories)配置 , 過濾器工廠( Gateway Filter Factories)配置 , 全局過濾器(Glob

    2023年04月08日
    瀏覽(21)
  • 【使用Spring Cloud Gateway構(gòu)建微服務網(wǎng)關(guān)】—— 每天一點小知識

    【使用Spring Cloud Gateway構(gòu)建微服務網(wǎng)關(guān)】—— 每天一點小知識

    · ??????????????????????????????????????????????????????????????????????? ?? 使用 S p r i n g C l o u d G a t e w a y 構(gòu)建微服務網(wǎng)關(guān) color{#FF1493}{使用Spring Cloud Gateway構(gòu)建微服務網(wǎng)關(guān)} 使用 Sp r in g Cl o u d G a t e w a y 構(gòu)建微服務網(wǎng)關(guān) ?? ???????

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

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

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

    2024年02月12日
    瀏覽(28)
  • Java之SpringCloud Alibaba【七】【Spring Cloud微服務網(wǎng)關(guān)Gateway組件】

    Java之SpringCloud Alibaba【七】【Spring Cloud微服務網(wǎng)關(guān)Gateway組件】

    Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 跳轉(zhuǎn) Java之SpringCloud Alibaba【二】【微服務調(diào)用組件Feign】 跳轉(zhuǎn) Java之SpringCloud Alibaba【三】【微服務Nacos-config配置中心】 跳轉(zhuǎn) Java之SpringCloud Alibaba【四】【微服務 Sentinel服務熔斷】 跳轉(zhuǎn) Java之SpringCloud Alibaba【五】【微服務

    2024年02月06日
    瀏覽(34)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包