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

SpringCloud中的路由網關鑒權熔斷詳解

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

基礎組件

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

配置

網關 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 默認使用的是 webflux,不要引入 web,否則啟動會報錯。

啟動配置 bootstrap.yml,請自行安裝 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 # 熔斷回調
      - id: weChat
        uri: lb://tools-meizi
        predicates:
        - Path=/api/meizi/**
        filters:
        - StripPrefix=2
    # 跨域請求
    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

鑒權

  /**
         * 判斷 token 是否為空
         */
        if (StringUtils.isBlank(token)) {
            logger.info( "token is empty..." );
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }else{
            /**
             * 驗證真?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)中,由于某些原因使得服務出現(xiàn)了過載現(xiàn)象,為防止造成整個系統(tǒng)故障,從而采用的一種保護措施,所以很多地方把熔斷亦稱為過載保護。

適用場景

防止應用程序直接調用那些很可能會調用失敗的遠程服務或共享資源。

服務降級

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

核心配置:

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 # 熔斷回調

主要參數(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

/**
 * 降級處理
 */
@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","服務異常");
        return map;
    }
}

小結

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

Ribbon:服務間發(fā)起請求的時候,基于Ribbon做負載均衡,從一個服務的多臺機器中選擇一臺

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

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

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

相關文章

  • Java異常架構和異常關鍵字圖文詳解

    Java異常架構和異常關鍵字圖文詳解

    Java異常是Java提供的一種識別及響應錯誤的一致性機制,下面這篇文章主要給大家介紹了關于Java異常架構和異常關鍵字的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    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實現(xiàn)一對一聊天和公告的示例代碼

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

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

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

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

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

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

    JDK17前后寫法超詳細對比(差點沒認出是Java)

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

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

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

    Java如何分析算法的時間和空間復雜度

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

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

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

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

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

最新評論

中西区| 齐河县| 自贡市| 阿拉善左旗| 海晏县| 湟中县| 和顺县| 岳普湖县| 保定市| 图木舒克市| 阿城市| 鱼台县| 云梦县| 佛教| 阿合奇县| 江都市| 镇远县| 梅州市| 昌江| 青岛市| 德安县| 阿合奇县| 彭阳县| 芮城县| 蒲城县| 雷山县| 洪湖市| 张家港市| 稷山县| 盐边县| 新干县| 江孜县| 温宿县| 柳江县| 平远县| 和顺县| 江陵县| 徐汇区| 高州市| 文登市| 沧源|