spring cloud gateway配置分析


srping cloud gatewayバージョン:2.0.2
自動配置クラスリストspring.factores
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,\
org.springframework.cloud.gateway.config.GatewayAutoConfiguration,\
org.springframework.cloud.gateway.config.GatewayLoadBalancerClientAutoConfiguration,\
org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration,\
org.springframework.cloud.gateway.config.GatewayRedisAutoConfiguration,\
org.springframework.cloud.gateway.discovery.GatewayDiscoveryClientAutoConfiguration
  • GatewayClass PathWarningAutoConfigration依存性検査クラス
  • GatewayAutoConfigration主な構成クラス
  • Gateway LoadBalancer Client AutoConfigration負荷等化クライアント構成
  • GatewayMetrics AutoConfigrationメトリック構成
  • GatewayRedis AutoConfigration redis構成
  • GatewayDiscoveryClient AutoConfigrationは、クライアント構成
  • を自動的に発見する.
    GatewayClass PathWarningAutoConfigration
    これは主に検査です.
  • spring-book-starter-webがあれば、ヒント
  • を削除します.
  • spring-boot-starter-webfluxヒントがなければ
  • を追加します.
    Gateway LoadBalancer Cient AutoConfigration
    Ribboon AutoConfigrationに依存して作成されたLoadBalancer CientはLoadBalancer Clidentを使ってLoadBalancerを作成しました.
    GatewayDiscoveryClient AutoConfigration
    作成List:lb:/+serviceId作成List:RewritePath'/'+serviceId+'(?.*)'/'/$remaning'作成DiscoveryLoperties作成DiscoveryClintRoute DefinitionLocator作成
    Gateway Metrics AutoConfigration
    GatewayMetrics Filterフィルタを作成します.
    Redis AutoConfigration
    redis Templateを作成します
    Gateway AutoConfigration
    @Configuration
    //spring.cloud.gateway.enabled         ,     
    @ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true)
    @EnableConfigurationProperties
    @AutoConfigureBefore(HttpHandlerAutoConfiguration.class)
    @AutoConfigureAfter({ GatewayLoadBalancerClientAutoConfiguration.class,
    		GatewayClassPathWarningAutoConfiguration.class })
    @ConditionalOnClass(DispatcherHandler.class)
    
    NettyConfigrationを作成します.
  • HttpClientPropties
  • を作成します.
  • nettyClientOptionsを作成します.connectTimeout、ssl、pool、proxy
  • HttpClient
  • を作成します.
  • NettyRoutingFilter
  • を作成します.
  • NettyWriteResonse Filter
  • を作成します.
  • ReactoNettyWebSocketClient
  • を作成します.
    HddenHttp MethodFilterを作成します.
    Route Locator Builderを作成します.
    GatewayProptiesを作成します.
    ここでプロパティファイルからルータの設定とデフォルトフィルタの構成を作成します.List default Filters;List streamingMediaTypes;
    Propties Route DefinitionLocatorを作成します.
    Propties RouteDefinitionLocatorはRoute DefinitionLocatorを実現し、Gateway Proptiesから取得したRoute Definitionを保存しました.
    InMemoryRouteDefinitionRepositoryを作成します.
    InMemoryRouteDefinitionRepositoryはRouteDefinitionLocatorを実現し、運転時に作成したRoute Definitionを保存しました.
    ComputsiteRoute DefinitionLocatorを作成します.(Primary RouteDefinitionLocator)
    InMemoryRouteDefinitionRepository、Propties Route DefinitionLocator、DiscoveryClient Route DefinitionLocator、および任意のカスタムRoute DefinitionLocatorをマージします.
    Route Locatorを作成します
    	@Bean
    	public RouteLocator routeDefinitionRouteLocator(GatewayProperties properties,
    												   List GatewayFilters,
    												   List predicates,
    												   RouteDefinitionLocator routeDefinitionLocator) {
    		return new RouteDefinitionRouteLocator(routeDefinitionLocator, predicates, GatewayFilters, properties);
    	}
    
    GatewayProperties+すべてのGatewayFilterFactory+すべてのRoutePredicateFactory+上に作成されたCompsiteRoute DefinitionLocatorを使ってルータリストRouteDefinitionRoute Locatorを作成します.
    CachingRoute Locatorを作成します.
    CachingRoute Locatorを使ってRouteDefinitionRoute Locatorを包装します.
    RouteRefresh Listenerを作成します.
    コンテキストイベントをモニターし、必要に応じてCachingRoute Locatorのキャッシュを更新します.
    Global CorsProptiesを作成します.
    グローバルアクセス設定
    FilteringWebHandlerを作成します.
    フィルタはコア類を処理し、ここでフィルタチェーンを組み立てます.
    RoutePredicateHandlerMappingを作成します.
    コアクラスの処理をお願いします.FilteringWebHandler+Route Locator+GlobalCorsPropties+Evironmentを使って作成します.すべての要求処理はここで組み立てられます.
    SecureHeaders Proptiesを作成します.
    httpヘッドと安全に関する配置
    Forwarded Headers Filterフィルタを作成します.
    RemoveHopByHopHeaders Filterフィルタを作成します.
    XForwarded Headers Filterフィルタを作成します.
    グローバルフィルタを作成
  • Adapt CachedBodGlobal Filter
  • Route Torequest UrlFilter
  • ForwardRoutingFilter
  • ForwardPathFilter
  • WebsocketRoutingFilter
  • Weight CalculatoWebFilter
  • predicate factoryを作成します.
  • AfterRoutePredicateFactory
  • Before RoutePredicateFactory
  • BetweenRoutePredicateFactory
  • Cookie RoutePredicateFactory
  • Header RoutePredicateFactory
  • HostRoutePredicateFactory
  • MethodRoutePredicateFactory
  • PathRoutePredicateFactory
  • QueryRoutePredicateFactory
  • ReadBodyPredicateFactory
  • RemoteAddr RoutePredicateFactory
  • Weight RoutePredicateFactory
  • CloudFoundryRouteServiceRoutePredicateFactory
  • 内蔵フィルタを作成
  • Addrequest HeaderGateway Filter Factory
  • Addrequest ParameterGateway Filter Factory
  • Add ResonseHeaderGateway Filter Factory
  • HystrixGateway FilterFactory
  • ModifyRequest BodyGateway Filter Factory
  • ModifyResonseBodGateway Filter Factory
  • PrefixPathGateway FilterFactory
  • PrserveHostHeaderGateway Filter Factory
  • RedirectToGateway FilterFactory
  • RemoveRequest HeaderGateway Filter Factory
  • RemoveResonseHeaderGateway Filter Factory
  • Request RateLimiterGateway Filter Factory
  • RewritePathGateway FilterFactory
  • RetryGateway FilterFactory
  • SetPathGateway FilterFactory
  • SecureHeaders GatewayFilter Factory
  • Set Request HeaderGateway Filter Factory
  • Set ResonseHeaderGateway Filter Factory
  • Set Status Gateway FilterFactory
  • SaveSession Gateway FilterFactory
  • StripPrefixGateway FilterFactory
  • Request Header Torequest UriGatewayFilterFactory
  • gatewayController Endpointを作成します.
    締め括りをつける
    spring cloud gatewayの創建は比較的複雑で、コアクラスはGateway AutoConfigrationで、以下のいくつかのことをしました.
  • は、Netty
  • を構成しています.
  • GatewayPropertiesを作成し、ここではルータ定義とデフォルトフィルタ定義を取得しました.
  • は、プロパティRoute DefinitionLocator、メモリRoute DefinitionLocator、および自動発見サービスRoute DefinitionLocatorを作成し、この3つをComposite Route DefinitionLocator
  • に統合しました.
  • GatewayProperties+すべてのGatewayFilterFactoryを使って、RoutePredicateFactory+ComputsiteRoute DefinitionLocatorを使ってルータリストRoute Locatorを作成します.これはすべてを含みます.
  • は、グローバルフィルタ
  • のセットを作成しました.
  • フィルタ処理クラスFilteringWebHandler
  • を作成します.
  • 作成要求処理クラスRoutePredicateHandlerMapping