spring cloud gateway 2深く理解する-filter

4321 ワード

簡単に述べる
  • spring cloud gatewayルーティングフィルタは、着信したHTTP要求または伝えられたHTTP応答
  • を修正する.
  • spring cloud gatewayは、他のspring cloudコンポーネント
  • を異なるフィルタで集積する.
  • フィルタの種類
  • GatewayFilter Factores:フィルタ工場が生成するゲートウェイフィルタ
  • Global Filters:グローバルフィルタ
  • ゲートウェイフィルタ
    StripPrfixフィルタ
  • 機能:一部のURLパスを削除する
  • 構成例(入門教程):
  • spring:
      cloud:
        gateway:
          routes:
            #   eureka         
          - id: hello_ribbon_route
            uri: lb://spring-cloud-producer
            predicates:
            - Path=/producerInEureka/**
            filters:
            - StripPrefix=1
    
  • 上記のように、ゲートウェイアドレスhttp://host:port/producerInEureka/helloにアクセスした場合
  • もしStripPrefixフィルタがない場合、gatewayは、バックグラウンドサービスspring-cloud-producerに要求するurlを送信します.http://spring-cloud-producer/producerInEureka/hello
  • です.
  • StripPrefixフィルタがある場合、gatewayは、StripPrefix=1によって割り当てられた値(ここでは1)からURLパスの部分プレフィックスを削除する(ここではプレフィックスを削除する、すなわちproducerInEurekaを削除する).
  • バックグラウンドサービスspring-cloud-producerに要求を送信するurlはhttp://spring-cloud-producer/hello
  • になる.
    PrefixPathフィルタ
  • は、URLパスの前に部分的なプレフィックスを追加する
  • とは逆の役割を果たしている.
    spring:
      cloud:
        gateway:
          routes:
          - id: prefixpath_route
            uri: http://example.org
            filters:
            - PrefixPath=/mypath
    
  • これは、StripPrefixをルーティング/mypathに一致するすべての要求の経路の前に追加する.
  • は、prefixpath_routeに対する要求を/helloに送信する.
  • Hystrixフィルタ
  • の役割:Hystrixフィルタは、サーキットをゲートウェイのルートに導入し、カスケード障害の影響からサービスを保護し、下流の故障時に応答を提供することができます.
  • 構成例
  • spring:
      cloud:
        gateway:
          routes:
          - id: hystrix_route
            uri: http://example.org
            filters:
            - Hystrix=myCommandName
    
  • は、上述のように配置された後、gatewayは/mypath/helloを使用してHystrixCommandオブジェクトとして生成し、ヒューズ管理を行う.
  • 上はただHystrixフィルタの簡単な構成方式であり、失敗した場合は次のように
  • を構成する.
    spring:
      cloud:
        gateway:
          routes:
          - id: hystrix_route
            uri: lb://backing-service:8088
            predicates:
            - Path=/consumingserviceendpoint
            filters:
            - name: Hystrix
              args:
                name: fallbackcmd
                fallbackUri: forward:/incaseoffailureusethis
            - RewritePath=/consumingserviceendpoint, /backingserviceendpoint
    
  • において、myCommandNamefallbackUri: forward:/incaseoffailureusethisの時に調整されるべき経路を構成している.
  • Hystrixを呼び出したfallbackが起動されると、要求はfallbackのURIに転送される.
  • その他のフィルタは公式文書をご覧ください.http://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.0.0.RELEASE/single/spring-cloud-gateway.html#_gatewayfilter_factores
    グローバルフィルタ
    グローバルフィルタの構成はゲートウェイフィルタとは異なる.また、その作用範囲はすべてのルーティング構成であるが、それぞれの有効条件がある.
    LoadBalancer Client負荷バランスフィルタ(eureka登録センターを統合)
  • 役割:統合ribonとeureka
  • 構成例(入門教程):
  • spring:
      cloud:
        gateway:
          routes:
            #   eureka         
          - id: hello_ribbon_route
            uri: lb://spring-cloud-producer
            predicates:
            - Path=/producerInEureka/**
            filters:
            - StripPrefix=1
    
  • ルーティング構成において/incaseoffailureusetによって使用されるプロトコルがuriである場合(lbを例にして)、gatewayはLoadBalancer Cientを使用して、uri: lb://spring-cloud-producerをeurkaによって実際のホストとポートとして解析し、負荷の等化を行う.
  • Netty Routing Filter
  • ルーティング構成においてspring-cloud-producerが使用するプロトコルがuriまたはhttpである場合、nettyルーティングフィルタは
  • を有効にする.
  • は、Nettyのhttpsを使用して、要求をゲートウェイの後のサービスに転送する役割を果たしている.
  • Websocket Routing Filter
  • は、HttpClientのインフラストラクチャを使用してSpring Web Socketを転送するために動作し、
  • を要求する.
  • の構成例は以下の通りです.
    spring:
      cloud:
        gateway:
          routes:
          #     Websocket   
          - id: websocket_route
            uri: ws://localhost:3001
            predicates:
            - Path=/websocket/**
          # SockJS   
          - id: websocket_sockjs_route
            uri: http://localhost:3001
            predicates:
            - Path=/websocket/info/**
    
  • ルーティング構成においてWebsocketで使用されるプロトコルがuriまたはwsである場合、Websocketルーティングフィルタは、
  • を有効にする.
  • は、websocketを使用してフィルタをルーティングする際に、負荷等化フィルタ
  • を使用してもよい.