Zuul2代碼詳解

說明:
1 前面加星號,需要重點掌握
2 zuul2命名規則:
  帶sync的就是同步,同樣的名稱不帶sync的就是異步
  BaseServerStartup只爲我們提供了基礎的server,這是個抽象類,需要使用者自己來實現。
  同理2種InboundFilter、2種OutboundFilter、1種Endpoint也都是抽象類,需要使用者自己來實現。

io.netty
  |
  bootstrap
    |
 ZuulBootstrap 這個繼承了Bootstrap而不是ServerBootstrap,zuul2實現的netty客戶端,用於管理origin
  |
  handler.codec.http2
    |
 Http2FrameCodec inbound+outbound,zuul2解決http2中二進制轉碼的問題
 DefaultHttp2PushPromiseFrame Http2HeadersFrame的默認實現
 Http2PushPromiseFrame 接口,封裝了下netty的Http2HeadersFrame,增加了一個streamId
com.netflix
  |
  config
    |
   DynamicIntegerSetProperty 自定義數字類型動態變量
   PatternListStringProperty 自定義正則表達List類型的動態變量
  |
  netty.common
    |
 accesslog
   |
     AccessLogChannelHandler inbound+outbound,對報文出入的統計,維護到channel的RequestState對象
     AccessLogPublisher 拼接StringBuilder記錄日誌,這裏有些配置可以自定義報文格式,也可以直接重寫整個Publisher
 |
 channel.config
   |
     ChannelConfig 維護了一個HashMap<ChannelConfigKey, ChannelConfigValue>,提供增刪改和clone,兩種添加方式,下面有詳解。之所以不用普通的鍵值對是因爲還要解決構造channel時的複雜依賴問題。
     ChannelConfigKey 帶默認默認value的key,ChannelConfig中set方法是爲ChannelConfigKey準備的
     ChannelConfigValue 帶ChannelConfigKey關係的value,ChannelConfig中add方法是爲ChannelConfigValue準備的
     CommonChannelConfigKeys zuul2源碼中用到的所有的key都在這裏面,例如maxConnections、withProxyProtocol、httpRequestReadTimeout、maxConnections,詳見BaseServerStartup
    http2
   |
     DynamicHttp2FrameLogger 本質是個ChannelHandler,記錄http的日誌
 metrics
   |
     EventLoopGroupMetrics 存放Group下EventLoop的指標信息
     EventLoopMetrics 利用AtomicInteger維護EventLoop的請求數和鏈接數
     Http2MetricsChannelHandlers  inbound+outbound,進行異常統計和錯誤碼統計,構造Http2SslChannelInitializer時會使用
     HttpBodySizeRecordingChannelHandler 在inbound和outbound中向ChannelHandlerContext中維護bodySize
     HttpMetricsChannelHandler 也是個http統計,但是隻做了inbound,處理HttpServerLifecycleChannelHandler相關事件
     PerEventLoopMetricsChannelHandler 爲EventLoopGroupMetrics的request請求數和鏈接數提供數據的Inbound
     ServerChannelMetrics 服務器級別統計totalConnections、connectionErrors、connectionClosed、connectionIdleTimeout、connectionThrottled的inbound。該handler也會放置在BaseZuulChannelInitializer的pipeline中,但是沒看到如何去利用這些統計數據,如果自己不實現利用起來,感覺是在浪費資源。
 proxyprotocol
   |
     ElbProxyProtocolChannelHandler 提供了一個Inbound,把一些報文信息維護到ChannelHandlerContext中
     OptionalHAProxyMessageDecoder 提供了一個Inbound處理新鏈接是代理的場景,用代理在pipeline中替換掉自己
     StripUntrustedProxyHeadersHandler 提供了一個inbound刪除不信任站點中的頭信息
 ssl
   |
     ServerSslConfig 一個配置類,zuul2啓動的時候會設置這個配置類
     SslHandshakeInfo ssl握手鑑權相關的配置
 status
   |
     ServerStatusHeaderHandler 空的Outbound,作者還沒實現(2020/03/23)
     ServerStatusManager eureka-client的封裝,向註冊中心上報狀態,獲取其它服務的狀態
 throttle
   |
     MaxInboundConnectionsHandler channel共享的Inbound,限制最大連接數,maxConnections<=0時不限制,放開後超過閾值會觸發CONNECTION_THROTTLED_EVENT事件
 AbstrHttpConnectionExpiryHandler 子通道outbound逾期處理,超過逾期將被打標
 CategorizedThreadFactory FastThreadLocalThread的線程工廠,空間換時間,Server中workerThreadFactory的實現
 CloseOnIdleStateHandler Inbound,監聽IdleStateEvent事件,channel空閒之後,關閉連接。我們可以跟到IdleStateEvent中,看到netty定義了很多種關閉連接的事件。
 ConnectionCloseType enum,定義鏈接關閉類型:IMMEDIATE, GRACEFUL, DELAYED_GRACEFUL
 Http1ConnectionCloseHandler,Http2ConnectionCloseHandler 兩種http關閉鏈接的Outbound,都分爲DELAYED_GRACEFUL、GRACEFUL、IMMEDIATE三種方式,2代與1代的不不同是多了parent層級關係
 Http1ConnectionExpiryHandler,Http2ConnectionExpiryHandler 兩種http鏈接過期的Outbound,1代採用GRACEFUL方式,2代採用DELAYED_GRACEFUL方式
 HttpChannelFlags 一個輔助類,可以給channel立flag,然後可以通過flag回頭來找channel,在Http*Connection*Handler中被使用
 HttpClientLifecycleChannelHandler HttpLifecycleChannelHandler的實現類,內置一個outbound和inbound,走父類的框架
 HttpLifecycleChannelHandler Out+Inbund抽象類,目前只定義了2個事件start和complete,設置了一個框架維護channel的attribute和pipeline
 HttpRequestReadTimeoutEvent http請求超時事件
 HttpRequestReadTimeoutHandler Inbound,觸發超時事件後,更新了channel的passport。
 HttpServerLifecycleChannelHandler HttpLifecycleChannelHandler的實現類,內置一個outbound和inbound,走父類的框架
 LeastConnsEventLoopChooserFactory EventLoop選擇器的工廠類,配合EventLoopGroupMetrics選擇最小鏈接數的executor,該工廠最終將用於server的EventLoopGroup
 RequestResponseCompleteEvent 目前是個空類 (2020/3/24)
 SourceAddressChannelHandler Inbound,channel中維護sourceIp、localIp等信息,可以解決鏈路追蹤、ip透傳等問題
  |
  zuul
    |
   constants
     |
    ZuulConstants zuul2中的常量,一般都會對應着一個配置項,目前並不是所有的常量都被引用到,可以看得出zuul2的發展方向
    ZuulHeaders 頭信息的常量,爲了代碼統一和性能考慮
 |
   context
     |
    CommonContextKeys zuul2中關於內容的常量Key
    Debug SessionContext的封裝,用於debug打印輸出
    SessionCleaner 空接口,未實現 (2020/3/24)
    SessionContext 深度克隆的會話信息,非線程安全,SessionContext是HttpRequestMessage和HttpResponseMessage裏的重要屬性
    SessionContextDecorator SessionContext的封裝器接口
    SessionContextFactory 空接口,未實現 (2020/3/24)
    ZuulSessionContextDecorator SessionContextDecorator的實現類,封裝器乾的事情也就是給channel維護attribute信息
 |
   event
     |
    ZuulEvent 應該是個廢棄類,com.netflix.zuul.stats下也有ZuulEvent
 |
   exception
     |
    ErrorType 定義了outbound錯誤類型對應的返回500+的返回碼,可以通過配置修改
    OutboundErrorType 將outbound的錯誤拆分爲三維:返回碼、狀態分類、客戶端錯誤類型。
    OutboundException 繼承ZuulException,專門封裝outbound中的異常
    ZuulFilterConcurrencyExceededException 繼承ZuulException,專門封裝filter中的異常
 |
   filters
     |
    common
      |
     GZipResponseFilter 支持gzip的HttpOutboundSyncFilter,開箱即用
     SurgicalDebugFilter PASS,與Eureka調試用的一個HttpInboundSyncFilter
  |
    endpoint
      |
     MissingEndpointHandlingFilter 當endpoint找不到時直接拋500
     *ProxyEndpoint 核心代碼,zuul2中內置的endpoint的實現,zuul2如何通過netty來管理origin
  |
    *http
      |
     HttpInboundFilter  官宣的異步InboundFilter基類,使用者自己實現
     HttpInboundSyncFilter  官宣的同步InboundFilter基類,使用者自己實現
     HttpOutboundFilter  官宣的異步OutboundFilter基類,使用者自己實現
     HttpOutboundSyncFilter  官宣的同步OutboundFilter基類,使用者自己實現
     HttpSyncEndpoint  官宣Endpint的基類,使用者自己實現。
  |
    passport
      |
     InboundPassportStampingFilter PassportStampingFilter的實現類,BaseZuulChannelInitializer會裝載
     OutboundPassportStampingFilter PassportStampingFilter的實現類,BaseZuulChannelInitializer會裝載
     PassportStampingFilter 通過passport跟蹤狀態,打時間戳
  |
    BaseFilter 異步類型ZuulFilter的抽象類,看名稱就知道是zuul過濾器的基類
    BaseFilterTest PASS mock測試類
    BaseSyncFilter 同步類型ZuulFilter的基類
    Endpoint  BaseFilter的實現類,重點代碼是order=0
    FilterError 定義了filter錯誤的封裝對象
    FilterRegistry 單例,維護了一個ConcurrentHashMap<String, ZuulFilter>,用於jvm管理zuul的filter
    FilterSyncType 過濾器分兩種:SYNC, ASYNC
    FilterType filter的類型:INBOUND、ENDPOINT、OUTBOUND
    ShouldFilter  接口,filter是否應該被執行
    SyncZuulFilter 接口,繼承ZuulFilter,定義了同步filter需要執行的apply方法
    SyncZuulFilterAdapter SyncZuulFilter的抽象類,接口zuulFilter裏有12個方法,這個類默認實現了11個,就留下apply等子類實現。這個類與BaseSyncFilter功能有重複,後面會有詳細的說明
    TestSyncFilter  PASS 測試類
    *ZuulFilter  接口,繼承ShouldFilter,添加了name、order、type、同步還是異步等一些列抽象方法
 |
   groovy
     |
    GroovyCompatability  PASS 測試類
    *GroovyCompiler 重要,這個就是zuul2的特性動態filter的心臟,本質就是通過GroovyClassLoader來加載code或file生成java.lang.Class
    GroovyFileFilter 只有.groovy後綴的文件纔可以被加載
 |
   guice
     |
    GuiceFilterFactory  FilterFactory的實現類,利用google的Guice框架來管理zuulFilter,從ZuulFiltersModule可以看到被依賴注入
 |
   init
     |
    ZuulFiltersModule 給zuul2關於filter方面的依賴注入,從sample的ZuulSampleModule中看到進行了初始化
 |
   logging
     |
    FilteredPatternLayout zuul2的日誌格式,設置爲日誌配置log4j.appender.stdout.layout的value
    Http2FrameLoggingPerClientIpHandler inbound,提供了可以爲具體ip做日誌跟蹤的功能
 |
   message
     |
    http
      |
     Cookies 定義Cookies對象
     HttpHeaderNames 羅列了常用的http頭,做成了static final
     HttpHeaderNamesCache 本質是個ConcurrentHashMap,設置了maxSize,默認header中能放30個KV
     HttpQueryParams 專門處理http的請求參數
     HttpRequestInfo 接口,繼承ZuulMessage,補充了get協議、方法、端口等方法
     HttpRequestMessage 接口,繼承HttpRequestInfo,補充了set協議、方法、端口等方法
     HttpRequestMessageImpl HttpRequestMessage的實現,很像一個代理,其實大部分功能都是內置的ZuulMessageImpl完成的
     HttpResponseInfo  不介紹了,跟request一個套路
     HttpResponseMessage 不介紹了,跟request一個套路
     HttpResponseMessageImpl  不介紹了,跟request一個套路
   Header 創建一個對象專門管理http中hader,name用HeaderName類型,value用string
   HeaderName 創建一個對象專門管理http中hader的key,裏面有個配置是否大小寫敏感,默認爲true
   Headers Header的集合,一次http交互中所有的頭信息
   ZuulMessage 接口,zuul2中維護http信息的主入口,getContext、getHeaders、setBody等等等等
   *ZuulMessageImpl ZuulMessage的實現類
 |
   metrics
     |
    OriginStats  PASS 空類 (2020/3/24)
    OriginStatsFactory PASS 空類 (2020/3/24)
 |
   monitoring
     |
    CounterFactory 一個抽象的計數器工廠
    MonitoringHelper PASS 目前無實際意義 (2020/3/24)
    Tracer 接口,追蹤
    TracerFactory 一個抽象的追蹤工程
 |
   netty
     |
    connectionpool
      |
     BasicRequestStat RequestStat的實現類,ProxyEndpoint會用它維護請求狀態
     ClientChannelManager 接口,origin中channel管理器,包括初始化、關閉、獲取EventLoop等,會被BasicNettyOrigin內置
     ClientTimeoutHandler origin客戶端超時的handler,是一個複合bound,修改channel的pipeline
     ConnectionPoolConfig 接口,連接池的配置類,提供了獲取連接池配置相關的方法
     ConnectionPoolConfigImpl ConnectionPoolConfig的實現類,讀取配置文件實現相應接口,也會被BasicNettyOrigin內置,也提供大量默認值,對origin這塊參數調優可以考慮進來好好review下
     ConnectionPoolHandler inbound+outbound都有處理連接池的事件,捕獲EndPoint的對應自定義事件
     DefaultClientChannelManager ClientChannelManager的實現類,對PooledConnection的操作就是對客戶端channel的操作
     *DefaultOriginChannelInitializer 比較重要的類,裏面實現了對channel pipeline的初始化
     IConnectionPool 對connectionPool操作的接口,從方法上看與PooledConnection存在大量重複的地方。
     NettyClientConnectionFactory netty管理EndPoint時對ZuulBootstrap的工廠類
     OriginChannelInitializer ChannelInitializer抽象類,只是增加了metric,應該是爲了初始化metric相關的內容
     OriginConnectException 自定義異常
     PerServerConnectionPool IConnectionPool的實現,很多工作都是轉交給PooledConnection來完成的
     PooledConnection 對已經鏈接到EndPoint的channel做了一層封裝,配合管理channel的狀態和鏈接數統計,對connection的操作最終還是通過channelManager
     PooledConnectionFactory PooledConnection的工廠接口,一個PooledConnection管理一個channel
     RequestStat 接口,請求狀態相關方法
     ZuulNettyExceptionMapper PASS 空類 
  |
    filter
      |
     *BaseZuulFilterRunner FilterRunner的抽象實現,需要好好掌握filter這個方法,這裏面對應着HttpOutboundFiter和HttpInboundFilter的方法是如何被調度的,最終真正幹事的還是filter的applay或asyncApplay本身
     FilterRunner filter調度的接口
     *ZuulEndPointRunner BaseZuulFilterRunner的子類,endpoint的調度器,維護了一個FilterLoader,本質是通過filterLoader獲取endPointFilter然後調用父類的filter方法
     *ZuulFilterChainHandler BaseZuulFilterRunner的子類,zuul2中最重要的代碼,沒有之一,如何把zuul2的filter體系與Netty的channel體系相結合
     *ZuulFilterChainRunner BaseZuulFilterRunner的子類,filter鏈的執行器,維護了一個zuulFilter的數組,本質是循環調用父類的filter方法
  |
    insights
     |
       PassportLoggingHandler inbound完成事件debug passport信息,還設計了一個慢查詢之類的功能
    PassportStateHttpClientHandler in+out,更新passport的state,被BasicNettyOrigin初始化,內置處理client事件
    PassportStateHttpServerHandler in+out,更新passport的state,被BaseZuulChannelInitializer加載,用於作爲網關入口
    PassportStateListener passportState監聽器,只負責等待任務結束後標記下passportState執行成功還是失敗
    PassportStateOriginHandler 與PassportStateHttpClientHandler功能類似,打的是ORIGIN_開頭的標籤,被BasicNettyOrigin加載,zuul內部捕獲origin事件
    PassportStateServerHandler 與PassportStateHttpServerHandler功能類似,打的是SERVER_開頭的標籤,被ZuulServerChannelInitializer加載,用於作爲網關入口
  |
    ratelimiting
      |
     NullChannelHandlerProvider 目前是個空實現,去看了下BaseServerStartup的代碼,應該是給限速之類還沒寫完的代碼佔個坑 (2020/3/24)
  |
    server
      |
     http2
       |
      DummyChannelHandler ChannelHandler的空實現,沒看出有什麼作用
      Http2Configuration http2相關的配置,默認只支持http1
      Http2OrHttpHandler 當http2場景時維護channel的相關attribute
      Http2ResetFrameHandler http2重置的Inbound
      Http2SslChannelInitializer  BaseZuulChannelInitializer的子類,channel的pipeline初始化時增加了http2和ssl相關的handler
      Http2StreamErrorHandler 異常處理
      Http2StreamHeaderCleaner inbound,清理掉“x-http2-”頭信息,
      Http2StreamInitializer Inbound,把Http2StreamErrorHandler、Http2StreamHeaderCleaner織入pipeline,在Http2SslChannelInitializer中被構造
   |
     push 這個包是爲了解決websocket、SSE等主流服務器推送技術
       |
      PushAuthHandler 安全相關的inbound,例如可以從cookie中獲取數據
      PushChannelInitializer BaseZuulChannelInitializer的子類,把推送相關邏輯織入pipeline,但仍舊是個抽象類,需要玩家自己實現addPushHandlers方法
      PushClientProtocolHandler 推送時給客戶端進行協議相關的設置
      PushConnection 推送鏈接,維護了token,用令牌桶限流
      PushConnectionRegistry  利用一個ConcurrentMap,維護客戶端到web套接字或SSE通道的映射,說白了就是一個註冊中心
      PushMessageFactory  PASS,抽象工廠,沒見實現過
      PushMessageSender Inbound,真正發送推送的Handler
      PushMessageSenderInitializer 推送消息初始化,修改下pipeline
      PushProtocol 推送協議,目前有SSE和WEB_SOCKET
      PushRegistrationHandler 推送註冊的Inbound,
      PushUserAuth 用於定義一種鑑權,最重要的是getClientIdentity方法,返回用戶唯一標識
   |
     ssl
       |
      SslHandshakeInfoHandler  Inbound,處理ssl握手事件
        *BaseServerStartup 敲黑板:重要的代碼,zuul2作爲server端的入口抽象方法,涉及到默認的啓動配置,需要自己讀懂代碼並自己實現抽象方法choosePortsAndChannels後纔可以部署自己的zuul2網關,配合着SampleServerStartup一起學習下
     *BaseZuulChannelInitializer ChannelInitializer實現類,zuul2Channel的基礎初始化抽象類,初始化配置和pipeline,構造時主要構造兩個ChannelConfig對象:channelConfig裏放配置,channelDependencies裏放依賴對象。需要掌握addZuulHandlers方法,可以看到zuul加載了哪些filter,也可以看得出如何初始化了一條request、endpoint、response的鏈路。
     ClientConnectionsShutdown 處理EurekaClient狀態變更事件,當狀態變爲OUT_OF_SERVICE或DOWN時關閉所有客戶端channel。該功能默認關閉
     ClientRequestReceiver zuul2核心實現類,接收並處理http報文的inbound+outbound,被BaseZuulChannelInitializer內置加載
     ClientResponseWriter zuul2核心實現類,outbound,作爲客戶端向北向服務回寫response,被BaseZuulChannelInitializer內置加載
     DefaultEventLoopConfig EventLoopConfig接口的實現,默認eventLoop配置,決定服務網關EventLoopGroup的數量,默認一個Boss+N個workder,其中worker數取決於核數
     DirectMemoryMonitor 內存監控,通過schedule每10s獲取一次數據
     EventLoopConfig EventLoopGroup配置接口,詳見DefaultEventLoopConfig
     Http1MutualSslChannelInitializer BaseZuulChannelInitializer子類,增加了ssl初始化邏輯,在sample看到用於HTTP_MUTUAL_TLS場景的網關
     MethodBinding 綁定thread和context的上下文
     OriginResponseReceiver endpoint中用於接收路由服務的返回結果
     Server 敲黑板:重要代碼,ServerStartup會對它進行初始化,核心方法是setupServerBootstrap,如何啓動netty
     ServerTimeout 整個inbound的超時限制
     ZuulDependencyKeys zuul2開放出的代碼級用於配置的key
     ZuulServerChannelInitializer BaseZuulChannelInitializer的子類,zuul作爲http網關時的初始化邏輯,給pileine模板配置了一些列的Handler
  |
    ssl
      |
     BaseSslContextFactory SslContextFactory的實現類,讓zuul2作爲server端可以提供ssl解析的能力
     ClientSslContextFactory BaseSslContextFactory的子類,讓zuul2作爲client端可以發送ssl請求
     SslContextFactory 接口,定義了獲取ssl環境信息的方法
    ChannelUtils channel文本相關的輔助類
    NettyRequestAttemptFactory RequestAttempt異常封裝的輔助類
    RequestCancelledEvent 請求取消的空事件
    SpectatorUtils 處理時間戳、計數的輔助類
 |
   niws
     |
    RequestAttempt 內部請求類的封裝,會維護在channel的context中
    RequestAttempts RequestAttempt的集合類
 |
   origins
     |
    *BasicNettyOrigin 核心代碼,NettyOrigin的實現類,構造DefaultClientChannelManager並初始化,將zuul內的origin轉發
    BasicNettyOriginManager  OriginManager的實現類,管理origin,負責註冊和存儲ConcurrentHashMap
    InstrumentedOrigin  origin的子接口,origin第一層擴展
    LoadBalancer 內置一個負載均衡接口,目前還沒有實現類 (2020/3/24)
    LoadBalancerFactory 負載均衡工程接口,目前是個空接口 (2020/3/24)
    NettyOrigin  InstrumentedOrigin的子接口,origin第二層擴展
    Origin  Origin最外層接口,zuul2中一個具體的南向服務端口被定義成一個origin
    OriginConcurrencyExceededException  OriginThrottledException的子類
    OriginManager 管理Origin的接口
    OriginThrottledException ZuulException的子類 
    ServerInfo 服務信息輔助類,就倆屬性:host、port
 |
   passport
     |
    CurrentPassport 默認配置下唯一干的事情就是給channel設置“_current_passport”這個屬性,配置不建議打開,review下來除開調試意義不大
    PassportItem PassportState+時間戳
    PassportState 定義了passport的狀態
    StartAndEnd 啓止時間戳
 |
   plugins
     |
    Counter 計數器,看實現是給monitor用的
    MetricPoller 沒看到調用的代碼和案例,還不清楚用途
    ServoMonitor 沒看到調用的代碼和案例,還不清楚用途
    Tracer 沒看到調用的代碼和案例,還不清楚用途
 |
   scriptManager
     |
    FilterInfo 個filter做了包裝
    FilterVerifier 這是filter合法性的檢測器,特別時對groovy這種動態filter
 |
   stats
     |
    monitoring
      |
     Monitor  接口,只有註冊NamedCount的抽象方法
     MonitorRegistry 真正做事情的還是Monitor,先setMonitor再註冊,這只是一個代理
     NamedCount 接口,counter的封裝,給它們起個名字
  |
    status
      |
     StatusCategory 接口,name、id、組
     StatusCategoryGroup 接口 狀態類別組
     StatusCategoryUtils 在SessionContext中維護ZuulStatusCategory
     ZuulStatusCategory  StatusCategory的zuul的實現,定義了十幾種狀態碼
     ZuulStatusCategoryGroup StatusCategoryGroup的zuul實現,2個狀態組 1成功 2失敗
    AmazonInfoHolder 應該是與aws中的eureka對接
    BasicRequestMetricsPublisher RequestMetricsPublisher的實現,請求的監控推送
    ErrorStatsData 錯誤狀態數據對象
    ErrorStatsManager 對ErrorStatsData的管理,功能像是做錯誤統計之類的使用
    NamedCountingMonitor 做統計
    RequestMetricsPublisher 接口,收集並推送request
    RouteStatusCodeMonitor 路由狀態監控
    StatsManager 高緯度的統計監測工具
    Timing 納秒級別的表
    Timings 維護一組時間數據
    ZuulEvent zuul事件,沒看到這個事件怎麼被利用起來
 |
   util
     |
    一羣輔助類,不說了
   BasicFilterUsageNotifier FilterUsageNotifier的實現類,給filter不同的狀態做統計
   BasicRequestCompleteHandler RequestCompleteHandler的實現類,邏輯比較簡單
   DefaultFilterFactory 調用clasee的newInstance方法,但是從ZuulFiltersModule中看到真正生效的是它的兄弟GuiceFilterFactory
   DynamicCodeCompiler 動態代碼加載接口,GroovyCompiler是它的實現,理論上可以通過此接口支持其它動態語言
   ExecutionStatus 定義了zuul的執行狀態
   FilterFactory 過濾器工廠類
   *FilterFileManager 核心,zuul2對filter的加載策略,啓動加載包內的靜態filter,然後守護進程夾在配置位置的groovy的filter
   FilterLoader filter的加載器的具體實現
   FilterUsageNotifier 接口,被FilterRunner調度,看下來是zuul2設計的另一個回調處理邏輯鏈條,但是目前沒實現什麼東西,只做了統計。
   RequestCompleteHandler 接口,請求完成的回調
   ZuulApplicationInfo 應用元數據

遺留問題:
Q:SyncZuulFilterAdapter和BaseSyncFilter功能上有重複
A:按SyncZuulFilterAdapter作者的說法,每個BaseSyncFilter都要開啓一個CachedDynamicBooleanProperty性能不佳而且有內存泄漏,所以在高併發場景用SyncZuulFilterAdapter
   我看endpoint繼承SyncZuulFilterAdapter,HttpInboundSyncFilter和HttpOutboundSyncFilter繼承BaseSyncFilter

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章