spring cloud gateway配置分析
6771 ワード
srping cloud gatewayバージョン:2.0.2
自動配置クラスリストspring.factores 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 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を作成します
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
自動配置クラスリスト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
これは主に検査です.
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を作成します.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フィルタを作成します.
グローバルフィルタを作成
締め括りをつける
spring cloud gatewayの創建は比較的複雑で、コアクラスはGateway AutoConfigrationで、以下のいくつかのことをしました.