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

SpringCloud第三篇:GateWay服務(wù)網(wǎng)關(guān)

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

一、為什么需要服務(wù)網(wǎng)關(guān):

1、什么是服務(wù)網(wǎng)關(guān)

? ? ??傳統(tǒng)的單體架構(gòu)中只需要開放一個服務(wù)給客戶端調(diào)用,但是微服務(wù)架構(gòu)中是將一個系統(tǒng)拆分成多個微服務(wù),如果沒有網(wǎng)關(guān),客戶端只能在本地記錄每個微服務(wù)的調(diào)用地址,當(dāng)需要調(diào)用的微服務(wù)數(shù)量很多時,它需要了解每個服務(wù)的接口,這個工作量很大。那有了網(wǎng)關(guān)之后,能夠起到怎樣的改善呢?

? ? ?網(wǎng)關(guān)作為系統(tǒng)的唯一流量入口,封裝內(nèi)部系統(tǒng)的架構(gòu),所有請求都先經(jīng)過網(wǎng)關(guān),由網(wǎng)關(guān)將請求路由到合適的微服務(wù),所以,使用網(wǎng)關(guān)的好處在于: ?

(1)簡化客戶端的工作。網(wǎng)關(guān)將微服務(wù)封裝起來后,客戶端只需同網(wǎng)關(guān)交互,而不必調(diào)用各個不同服務(wù);
(2)降低函數(shù)間的耦合度。 一旦服務(wù)接口修改,只需修改網(wǎng)關(guān)的路由策略,不必修改每個調(diào)用該函數(shù)的客戶端,從而減少了程序間的耦合性
(3)解放開發(fā)人員把精力專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。由網(wǎng)關(guān)統(tǒng)一實(shí)現(xiàn)服務(wù)路由(灰度與ABTest)、負(fù)載均衡、訪問控制、流控熔斷降級等非業(yè)務(wù)相關(guān)功能,而不需要每個服務(wù) API 實(shí)現(xiàn)時都去考慮

2、網(wǎng)關(guān)的作用

  • 對用戶請求做身份認(rèn)證,權(quán)限校驗(yàn)
  • 將用戶請求路由到微服務(wù),并實(shí)現(xiàn)負(fù)載均衡
  • 對用戶請求做限流

SpringCloud第三篇:GateWay服務(wù)網(wǎng)關(guān)

二、搭建網(wǎng)關(guān)服務(wù)的步驟

1、創(chuàng)建新的module,引入SpringCloudGateway的依賴和nacos的服務(wù)發(fā)現(xiàn)依賴

<!--網(wǎng)關(guān)依賴-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<! --nacos服務(wù)發(fā)現(xiàn)依賴-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

?2、編寫路由配置即nacos地址

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

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

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

路由配置包括:

  1. 路由id:路由的唯一標(biāo)示

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

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

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

?三、斷言工廠

SpringCloud第三篇:GateWay服務(wù)網(wǎng)關(guān)

?PredicateFactory的作用:

  • 讀取用戶定義的斷言條件,對請求做出判斷

Path=/user/**是什么含義?

  • 路徑是以/user開頭的就認(rèn)為是符合的

四、過濾器工廠

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

SpringCloud第三篇:GateWay服務(wù)網(wǎng)關(guān)

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

SpringCloud第三篇:GateWay服務(wù)網(wǎng)關(guān)

1、請求頭過濾器

下面我們以AddRequestHeader 為例來講解。

需求:給所有進(jìn)入userservice的請求添加一個請求頭:Truth=itcast is freaking awesome!

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

spring:
  cloud:
    gateway:
      routes:
      - id: user-service 
        uri: lb://userservice 
        predicates: 
        - Path=/user/** 
        filters: # 過濾器
        - AddRequestHeader=Truth, Itcast is freaking awesome! # 添加請求頭

?當(dāng)前過濾器寫在userservice路由下,因此僅僅對訪問userservice的請求有效。

2、默認(rèn)過濾器(default-filters)

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

spring:
  cloud:
    gateway:
      routes:
      - id: user-service 
        uri: lb://userservice 
        predicates: 
        - Path=/user/**
      default-filters: # 默認(rèn)過濾項(xiàng)
      - AddRequestHeader=Truth, Itcast is freaking awesome! 

總結(jié)?

過濾器的作用

對路由的請求或響應(yīng)做加工處理,比如添加請求頭

② 配置在路由下的過濾器只對當(dāng)前路由的請求生效

?3、全局過濾器

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

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

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

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

實(shí)現(xiàn):

在gateway中定義一個過濾器:

  1. 實(shí)現(xiàn)GlobalFilter接口
  2. 添加@Order注解或?qū)崿F(xiàn)Ordered接口
  3. 編寫處理邏輯
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)
@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.校驗(yàn)
        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、過濾器執(zhí)行順序

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

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

SpringCloud第三篇:GateWay服務(wù)網(wǎng)關(guān)文章來源地址http://www.zghlxwxcb.cn/news/detail-478737.html

?排序規(guī)則:

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

到了這里,關(guān)于SpringCloud第三篇:GateWay服務(wù)網(wǎng)關(guān)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【SpringCloud技術(shù)專題】「Gateway網(wǎng)關(guān)系列」(2)微服務(wù)網(wǎng)關(guān)服務(wù)的Gateway功能配置指南分析

    【SpringCloud技術(shù)專題】「Gateway網(wǎng)關(guān)系列」(2)微服務(wù)網(wǎng)關(guān)服務(wù)的Gateway功能配置指南分析

    Spring Cloud Gateway簡介 Spring Cloud Gateway是Spring Cloud體系的第二代網(wǎng)關(guān)組件,基于Spring 5.0的新特性WebFlux進(jìn)行開發(fā),底層網(wǎng)絡(luò)通信框架使用的是Netty,所以其吞吐量高、性能強(qiáng)勁,未來將會取代第一代的網(wǎng)關(guān)組件Zuul。 Spring Cloud Gateway可以通過服務(wù)發(fā)現(xiàn)組件自動轉(zhuǎn)發(fā)請求,默認(rèn)集成了

    2024年02月11日
    瀏覽(53)
  • SpringCloud_Gateway服務(wù)網(wǎng)關(guān)

    SpringCloud_Gateway服務(wù)網(wǎng)關(guān)

    Spring Cloud Gateway 用\\\"Netty + Webflux\\\"實(shí)現(xiàn),不需要導(dǎo)入Web依賴。 Webflux 模式替換了舊的Servlet線程模型。用少量的線程處理request和response io操作,這些線程稱為Loop線程,而業(yè)務(wù)交給響應(yīng)式編程框架處理,響應(yīng)式編程是非常靈活的,用戶可以將業(yè)務(wù)中阻塞的操作提交到響應(yīng)式框架的

    2024年02月02日
    瀏覽(24)
  • 【SpringCloud技術(shù)專題】「Gateway網(wǎng)關(guān)系列」(1)微服務(wù)網(wǎng)關(guān)服務(wù)的Gateway組件的原理介紹分析

    【SpringCloud技術(shù)專題】「Gateway網(wǎng)關(guān)系列」(1)微服務(wù)網(wǎng)關(guān)服務(wù)的Gateway組件的原理介紹分析

    為什么要有服務(wù)網(wǎng)關(guān)? 我們都知道在微服務(wù)架構(gòu)中,系統(tǒng)會被拆分為很多個微服務(wù)。那么作為客戶端要如何去調(diào)用這么多的微服務(wù)呢?難道要一個個的去調(diào)用嗎?很顯然這是不太實(shí)際的,我們需要有一個統(tǒng)一的接口與這些微服務(wù)打交道,這就是我們需要服務(wù)網(wǎng)關(guān)的原因。 我們

    2024年02月11日
    瀏覽(32)
  • SpringCloud基礎(chǔ)篇-10-服務(wù)網(wǎng)關(guān)-Gateway

    SpringCloud基礎(chǔ)篇-10-服務(wù)網(wǎng)關(guān)-Gateway

    上一代網(wǎng)關(guān)Zuul 官網(wǎng) SpringCloudGateway官網(wǎng),變化很大,以實(shí)際為準(zhǔn) Gateway是在Spring生態(tài)系統(tǒng)之上構(gòu)建的API網(wǎng)關(guān)服務(wù),基于Spring5SpringBoot2和ProjectReactor等技術(shù)。 Gateway旨在提供一種簡單而有效的方式來對API進(jìn)行路由,以及提供一些強(qiáng)大的過濾器功能,例如:熔斷、限流、重試等 SpringCl

    2024年04月11日
    瀏覽(20)
  • day08-SpringCloud Gateway-服務(wù)網(wǎng)關(guān)

    沒有使用網(wǎng)關(guān)服務(wù)時: 使用網(wǎng)關(guān)服務(wù)后: 官網(wǎng):Spring Cloud Gateway Gateway是Spring生態(tài)系統(tǒng)之上構(gòu)建的API網(wǎng)關(guān)服務(wù),基于Spring、SpringBoot和Project Reactor等技術(shù) Gateway旨在提供一種簡單有效的方式來對API進(jìn)行路由,以及提供一切強(qiáng)大的過濾器功能,例如:熔斷、限流、重試等 鑒權(quán) 流

    2024年02月07日
    瀏覽(38)
  • SpringCloud微服務(wù) 【實(shí)用篇】| 統(tǒng)一網(wǎng)關(guān)Gateway

    SpringCloud微服務(wù) 【實(shí)用篇】| 統(tǒng)一網(wǎng)關(guān)Gateway

    目錄 一:統(tǒng)一網(wǎng)關(guān)Gateway 1. 為什么需要網(wǎng)關(guān) 2. gateway快速入門 3. 斷言工廠 4. 過濾器工廠 5. 全局過濾器 6. 跨域問題 前面我們已經(jīng)學(xué)習(xí)了注冊中心Eureka、Nacos和配置管理中心Nacos;但是此時存在很多安全的問題,服務(wù)器擺在那里誰都可以進(jìn)行訪問! 網(wǎng)關(guān)功能: ① 身份認(rèn)證和權(quán)

    2024年02月04日
    瀏覽(20)
  • SpringCloud之微服務(wù)API網(wǎng)關(guān)Gateway介紹

    SpringCloud之微服務(wù)API網(wǎng)關(guān)Gateway介紹

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

    2024年02月14日
    瀏覽(49)
  • SpringCloud Alibaba入門7之引入服務(wù)網(wǎng)關(guān)Gateway

    SpringCloud Alibaba入門7之引入服務(wù)網(wǎng)關(guān)Gateway

    我們需要在客戶端和服務(wù)端之間加一個統(tǒng)一的入口,來作為請求的統(tǒng)一接入,而在微服務(wù)的體系中,承擔(dān)這個角色的就是網(wǎng)關(guān)。我們只需要將網(wǎng)關(guān)的機(jī)器IP配置到DNS,或者接入負(fù)載,那么客戶端的服務(wù)最終通過我們的網(wǎng)關(guān),再轉(zhuǎn)發(fā)到對應(yīng)的服務(wù)端服務(wù)。 一、創(chuàng)建網(wǎng)關(guān)服務(wù) ?1.引

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

    目錄 一、微服務(wù)網(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日
    瀏覽(31)
  • 微服務(wù)-微服務(wù)為什么要用到 API 網(wǎng)關(guān)

    微服務(wù)-微服務(wù)為什么要用到 API 網(wǎng)關(guān)

    微服務(wù)架構(gòu)(通常簡稱為微服務(wù))是指開發(fā)應(yīng)用所用的一種架構(gòu)形式。通過微服務(wù),可將大型應(yīng)用分解成多個獨(dú)立的組件,其中每個組件都有各自的責(zé)任領(lǐng)域。 在處理一個用戶請求時,基于微服務(wù)的應(yīng)用可能會調(diào)用許多內(nèi)部微服務(wù)來共同生成其響應(yīng)。微服務(wù)是互聯(lián)網(wǎng)業(yè)務(wù)發(fā)展

    2023年04月13日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包