美文网首页
zuul 1/2 原理/源码分析

zuul 1/2 原理/源码分析

作者: notatent | 来源:发表于2019-04-29 19:26 被阅读0次

    1. Zuul1

    总体架构:


    1.png

    Zuul Servlet源码:


    2.png
    调用流程:
    3.png
    4.png

    2.Zuul2

    总体架构:


    5.png

    调用流程:

    10.png
    refer link: zuul-2-the-netflix-journey-to-asynchronous-non-blocking-systems

    时序图:
    以下是 zuul inbound 和 zuul outbound 中任意filter needsBodyBuffered方法 return true时的时序图
    图片过大,点击原图查看

    zuul2.png
    zuul inbound 和 outbound 中所有filter needsBodyBuffered方法 return false
    接收请求:
    ProxyEndpoint writeClientRequestToOrigin方法在netty lister成功时被调用(这时zuulRequest,bodyChunks有值)或先被调用(这时zuulRequest,bodyChunks为空),
    ZuulFilterChainHandler channelRead方法循环读 HttpContent,
    ZuulFilterChainRunner filter方法里 limit >= filters.length invokeNextStage(inMesg, chunk),
    ZuulEndPointRunner filter(zuulReq, chunk)方法里 endpoint.processContentChunk(zuulReq, chunk) 用originConn的channel(netty client)写HttpContent,zuulReq.bufferBodyContents(newChunk)里缓存 HttpContent
    origin发送:
    ClientResponseWriter chnnelRead方法里,先发送 zuulResponse,再循环写 HttpContent

    源码:
    Netty Server:


    6.png

    Http handler &Zuul pipeline:


    7.png

    GATEWAY SERVER PIPELINE:

    0 = "IdleStateHandler#0"
    1 = "CloseOnIdleStateHandler#0"
    2 = "SourceAddressChannelHandler#0"
    3 = "channelMetrics"
    4 = "PerEventLoopMetricsChannelHandler$Connections#0"
    5 = "ElbProxyProtocolChannelHandler"
    6 = "MaxInboundConnectionsHandler#0"
    7 = "codec"
    8 = "Http1ConnectionCloseHandler#0"
    9 = "conn_expiry_handler"
    10 = "PassportStateHttpServerHandler#0"
    11 = "http_request_read_timeout_handler"
    12 = "HttpServerLifecycleChannelHandler#0"
    13 = "ClientResponseHttpContentLimitHandler#0"
    14 = "HttpBodySizeRecordingChannelHandler#0"
    15 = "HttpMetricsChannelHandler#0"
    16 = "PerEventLoopMetricsChannelHandler$HttpRequests#0"
    17 = "AccessLogChannelHandler#0"
    18 = "ServerStatusHeaderHandler#0"
    19 = "StripUntrustedProxyHeadersHandler#0"
    20 = "logger"
    21 = "ClientRequestReceiver#0"
    22 = "ClientRequestHttpContentLimitHandler#0"
    23 = "ZuulFilterChainHandler#0"
    24 = "ClientResponseWriter#0"
    25 = "DefaultChannelPipeline$TailContext#0"
    

    Netty Client:


    8.png
    9.png

    GATEWAY CLIENT PIPELINE:

    0 = "PassportStateOriginHandler#0"
    1 = "codec"
    2 = "PassportStateHttpClientHandler"
    3 = "readTimeoutHandler"
    4 = "originNettyLogger"
    5 = "HttpMetricsChannelHandler#0"
    6 = "httpLifecycle"
    7 = "ClientTimeoutHandler#0"
    8 = "_origin_response_receiver"
    9 = "connectionPoolHandler"
    10 = "DefaultChannelPipeline$TailContext#0"
    

    相关文章

      网友评论

          本文标题:zuul 1/2 原理/源码分析

          本文链接:https://www.haomeiwen.com/subject/qapunqtx.html