最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud中的路由網(wǎng)關(guān)鑒權(quán)熔斷詳解

 更新時(shí)間:2024年01月10日 10:14:36   作者:愛coding的同學(xué)  
這篇文章主要介紹了SpringCloud中的路由網(wǎng)關(guān)鑒權(quán)熔斷詳解,Hystrix是一個(gè)用于處理分布式系統(tǒng)的延遲和容錯(cuò)的開源庫,在分布式系統(tǒng)里,許多依賴不可避免的會(huì)調(diào)用失敗,比如超時(shí)、異常等,需要的朋友可以參考下

基礎(chǔ)組件

  • 路由網(wǎng)關(guān):GateWay SpringCloud Gateway作為Spring Cloud生態(tài)系統(tǒng)中的網(wǎng)關(guān),目標(biāo)是替代Zuul,在Spring Cloud 2.0以上版本中,沒有對(duì)新版本的Zuul 2.0以上最新高性能版本進(jìn)行集成,仍然還是使用的Zuul 1.x非Reactor模式的老版本。而為了提升網(wǎng)關(guān)的性能,SpringCloud Gateway是基于WebFlux框架實(shí)現(xiàn)的,而WebFlux框架底層則使用了高性能的Reactor模式通信框架Netty。Spring Cloud Gateway的目標(biāo)提供統(tǒng)-的路由方式且基于 Filter鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/指標(biāo),和限流。
  • 注冊(cè)中心:Nacos Nacos 支持基于 DNS 和基于 RPC 的服務(wù)發(fā)現(xiàn)(可以作為springcloud的注冊(cè)中心)、動(dòng)態(tài)配置服務(wù)(可以做配置中心)、動(dòng)態(tài) DNS 服務(wù)。
  • 負(fù)載均衡:Ribbon 微服務(wù)間的調(diào)用,網(wǎng)關(guān)請(qǐng)求轉(zhuǎn)發(fā),feign都是通過ribbon實(shí)現(xiàn)的,因此學(xué)習(xí)ribbon的原理還是很重要的,而ribbon的作用是用于負(fù)載均衡,springcloud自動(dòng)化整合配置ribbon是RibbonEurekaAutoConfiguration這個(gè)類。對(duì)于開發(fā)者來說,使用ribbon只需要在RestTemplate上添加@LoadBalanced注解即可實(shí)現(xiàn)消費(fèi)方的負(fù)載均衡.
  • 熔斷器:Hystrix Hystrix是一個(gè)用于處理分布式系統(tǒng)的延遲和容錯(cuò)的開源庫,在分布式系統(tǒng)里,許多依賴不可避免的會(huì)調(diào)用失敗,比如超時(shí)、異常等 ,Hystrix 能保證在一個(gè)依賴出現(xiàn)問題的情況下,不會(huì)導(dǎo)致整體服務(wù)失敗,避免級(jí)聯(lián)故障,以提高分布式系統(tǒng)的彈性。 "斷路器"本身是一種開關(guān)裝置,但某個(gè)服務(wù)單元發(fā)生故障之后,通過短路器的故障監(jiān)控(類似熔斷保險(xiǎn)絲),向調(diào)用方返回一個(gè)符合預(yù)期的、可處理的備選響應(yīng)(FallBack),而不是長時(shí)間的等待或者拋出調(diào)用方法無法處理的異常,這樣就保證了服務(wù)調(diào)用方的線程不會(huì)被長時(shí)間、不必要的占用,從而避免了故障在分布式系統(tǒng)中的蔓延,乃至雪崩。

配置

網(wǎng)關(guān) pom.xml 引入:

dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
         <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
</dependencies>

注意 Gateway 默認(rèn)使用的是 webflux,不要引入 web,否則啟動(dòng)會(huì)報(bào)錯(cuò)。

啟動(dòng)配置 bootstrap.yml,請(qǐng)自行安裝 Nacos:

server:
  port: 8080
spring:
  application:
    name: tools-gateway
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      routes:
      - id: sys
        uri: lb://tools-sys
        predicates:
        - Path=/api/sys/**
        filters:
        - StripPrefix=2
        - name: Hystrix
          args:
            name: fallback
            fallbackUri: forward:/fallback # 熔斷回調(diào)
      - id: weChat
        uri: lb://tools-meizi
        predicates:
        - Path=/api/meizi/**
        filters:
        - StripPrefix=2
    # 跨域請(qǐng)求
    filter:
      remove-hop-by-hop:
        headers:
        - trailer
        - te
        - keep-alive
        - transfer-encoding
        - upgrade
        - proxy-authenticate
        - connection
        - proxy-authorization
        - x-application-context
        - access-control-allow-credentials
        - access-control-allow-headers
        - access-control-allow-methods
        - access-control-allow-origin
        - access-control-max-age
        - vary
      globalcors:
        corsConfigurations:
          '[/**]':
            allowCredentials: true
            allowedHeaders: '*'
            allowedMethods: '*'
            allowedOrigins: '*'
            maxAge: 3628800
# 熔斷
hystrix:
  command:
    default:
      circuitBreaker:
        enabled: true
        errorThresholdPercentage: 50
        forceClosed: false
        forceOpen: false
        requestVolumeThreshold: 4
        sleepWindowInMilliseconds: 10000
      execution:
        isolation:
          semaphore:
            maxConcurrentRequests: 2
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 3000
      metrics:
        healthSnapshot:
          intervalInMilliseconds: 500
        rollingPercentile:
          bucketSize: 100
          enabled: true
          numBuckets: 6
          timeInMilliseconds: 60000
        rollingStats:
          numBuckets: 10
          timeInMilliseconds: 5000
      requestCache:
        enabled: false
      requestLog:
        enabled: false
  shareSecurityContext: true
  threadpool:
    default:
      coreSize: 1
      maxQueueSize: 200
      queueSizeRejectionThreshold: 2

鑒權(quán)

  /**
         * 判斷 token 是否為空
         */
        if (StringUtils.isBlank(token)) {
            logger.info( "token is empty..." );
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }else{
            /**
             * 驗(yàn)證真?zhèn)?
             */
            CheckResult checkResult = JwtUtils.validateJWT(token);
            if (!checkResult.isSuccess()) {
                logger.info( "token is error..." );
                exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
                return exchange.getResponse().setComplete();
            }
        }
        return chain.filter(exchange);
    }
    @Override
    public int getOrder() {
        return -100;
    }
    private  static List<String> patterns =
            Arrays.asList(new String[] {"/api/sys/login","/error","/api/sys/v2/api-docs"});
}

熔斷

一般是指軟件系統(tǒng)中,由于某些原因使得服務(wù)出現(xiàn)了過載現(xiàn)象,為防止造成整個(gè)系統(tǒng)故障,從而采用的一種保護(hù)措施,所以很多地方把熔斷亦稱為過載保護(hù)。

適用場(chǎng)景

防止應(yīng)用程序直接調(diào)用那些很可能會(huì)調(diào)用失敗的遠(yuǎn)程服務(wù)或共享資源。

服務(wù)降級(jí)

當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)當(dāng)前業(yè)務(wù)情況及流量對(duì)一些服務(wù)和頁面有策略的降級(jí),以此釋放服務(wù)器資源以保證核心任務(wù)的正常運(yùn)行。

核心配置:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      routes:
      - id: sys
        uri: lb://tools-meizi
        predicates:
        - Path=/api/meizi/**
        filters:
        - StripPrefix=2
        - name: Hystrix
          args:
            name: fallback
            fallbackUri: forward:/fallback # 熔斷回調(diào)

主要參數(shù):

# 熔斷
hystrix:
  command:
    default:
      circuitBreaker:
        enabled: true
        errorThresholdPercentage: 50
        forceClosed: false
        forceOpen: false
        requestVolumeThreshold: 4
        sleepWindowInMilliseconds: 10000
      execution:
        isolation:
          semaphore:
            maxConcurrentRequests: 2
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 3000
      metrics:
        healthSnapshot:
          intervalInMilliseconds: 500
        rollingPercentile:
          bucketSize: 100
          enabled: true
          numBuckets: 6
          timeInMilliseconds: 60000
        rollingStats:
          numBuckets: 10
          timeInMilliseconds: 5000
      requestCache:
        enabled: false
      requestLog:
        enabled: false
  shareSecurityContext: true
  threadpool:
    default:
      coreSize: 1
      maxQueueSize: 200
      queueSizeRejectionThreshold: 2

核心代碼 DefaultHystrixController

/**
 * 降級(jí)處理
 */
@RestController
public class DefaultHystrixController {
    @RequestMapping("/fallback")
    public Map<String,String> fallback(){
        Map<String,String> map = new HashMap<>(8);
        map.put("code","fail");
        map.put("msg","服務(wù)異常");
        return map;
    }
}

小結(jié)

Nacos:Nacos 支持基于 DNS 和基于 RPC 的服務(wù)發(fā)現(xiàn)(可以作為springcloud的注冊(cè)中心)、動(dòng)態(tài)配置服務(wù)(可以做配置中心)、動(dòng)態(tài) DNS 服務(wù)。

Ribbon:服務(wù)間發(fā)起請(qǐng)求的時(shí)候,基于Ribbon做負(fù)載均衡,從一個(gè)服務(wù)的多臺(tái)機(jī)器中選擇一臺(tái)

Hystrix:發(fā)起請(qǐng)求是通過Hystrix的線程池來走的,不同的服務(wù)走不同的線程池,實(shí)現(xiàn)了不同服務(wù)調(diào)用的隔離,避免了服務(wù)雪崩的問題

Gateway:Spring Cloud Gateway的目標(biāo)提供統(tǒng)-的路由方式且基于 Filter鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/指標(biāo),和限流。

到此這篇關(guān)于SpringCloud中的路由網(wǎng)關(guān)鑒權(quán)熔斷詳解的文章就介紹到這了,更多相關(guān)SpringCloud路由鑒權(quán)熔斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java異常架構(gòu)和異常關(guān)鍵字圖文詳解

    Java異常架構(gòu)和異常關(guān)鍵字圖文詳解

    Java異常是Java提供的一種識(shí)別及響應(yīng)錯(cuò)誤的一致性機(jī)制,下面這篇文章主要給大家介紹了關(guān)于Java異常架構(gòu)和異常關(guān)鍵字的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 解決Spring Boot 在localhost域奇怪的404問題(Mac book pro)

    解決Spring Boot 在localhost域奇怪的404問題(Mac book pro)

    這篇文章主要介紹了解決Spring Boot 在localhost域奇怪的404問題(Mac book pro),需要的朋友可以參考下
    2017-09-09
  • Springboot+WebSocket實(shí)現(xiàn)一對(duì)一聊天和公告的示例代碼

    Springboot+WebSocket實(shí)現(xiàn)一對(duì)一聊天和公告的示例代碼

    這篇文章主要介紹了Springboot+WebSocket實(shí)現(xiàn)一對(duì)一聊天和公告的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringSecurity實(shí)現(xiàn)自定義登錄方式

    SpringSecurity實(shí)現(xiàn)自定義登錄方式

    本文介紹自定義登錄流程,包括自定義AuthenticationToken、AuthenticationFilter、AuthenticationProvider以及SecurityConfig配置類,詳細(xì)解析了認(rèn)證流程的實(shí)現(xiàn),為開發(fā)人員提供了具體的實(shí)施指導(dǎo)和參考
    2024-09-09
  • Java字符串拼接+和StringBuilder的比較與選擇

    Java字符串拼接+和StringBuilder的比較與選擇

    Java 提供了兩種主要的方式:使用 "+" 運(yùn)算符和使用 StringBuilder 類,本文主要介紹了Java字符串拼接+和StringBuilder的比較與選擇,感興趣的可以了解一下
    2023-10-10
  • JDK17前后寫法超詳細(xì)對(duì)比(差點(diǎn)沒認(rèn)出是Java)

    JDK17前后寫法超詳細(xì)對(duì)比(差點(diǎn)沒認(rèn)出是Java)

    在實(shí)際應(yīng)用中,開發(fā)人員可以根據(jù)項(xiàng)目需求選擇合適的JDK版本,例如,對(duì)于需要高運(yùn)行效率和低延遲的應(yīng)用,可以選擇最新版本的JDK,以便獲得更好的性能和特性支持,這篇文章主要介紹了JDK17前后寫法超詳細(xì)對(duì)比的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • 詳解SpringBoot文件上傳下載和多文件上傳(圖文)

    詳解SpringBoot文件上傳下載和多文件上傳(圖文)

    本篇文章主要介紹了詳解SpringBoot文件上傳下載和多文件上傳(圖文),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Java如何分析算法的時(shí)間和空間復(fù)雜度

    Java如何分析算法的時(shí)間和空間復(fù)雜度

    這篇文章主要介紹了Java如何分析算法的時(shí)間和空間復(fù)雜度,在計(jì)算機(jī)科學(xué)中,計(jì)算復(fù)雜性解釋了算法的性能。文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-06-06
  • SpringBoot之返回json數(shù)據(jù)的實(shí)現(xiàn)方法

    SpringBoot之返回json數(shù)據(jù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot之返回json數(shù)據(jù)的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 解決window.location.href之后session丟失的問題

    解決window.location.href之后session丟失的問題

    今天小編就為大家分享一篇關(guān)于解決window.location.href之后session丟失的問題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評(píng)論

苍溪县| 锦屏县| 阳泉市| 玉树县| 湟源县| 壶关县| 临邑县| 郸城县| 宜兰县| 清新县| 航空| 原阳县| 连平县| 新干县| 崇左市| 微山县| 佛山市| 新巴尔虎右旗| 元谋县| 安阳市| 屏山县| 综艺| 泰宁县| 九龙县| 湘乡市| 开封县| 阳新县| 浦江县| 大兴区| 徐水县| 太湖县| 兰西县| 涟水县| 嘉荫县| 兴隆县| 保定市| 和平县| 景东| 阳春市| 丁青县| 苗栗县|