dubbo-consumer調用堆棧

proxy0#method(argument)
	dubbo使用Javassist框架動態生成代理類
->com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler#invoke	
->com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker#invoke
	未配置mock屬性,繼續調用
	配置mock屬性,屬性值不是force開頭,先繼續調用,如果出現非業務異常(如超時),調用mock類
	配置mock屬性,屬性值是force開頭,調用mock類
->com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker#invoke(com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker#invoke)
	根據loadbalance屬性加載負載均衡策略,默認隨機策略
	random、roundrobin、leastactive、consistenthash
->com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker#doInvoke
	根據負載均衡策略,選擇要調用的Invoker對象(一個invoker對應一個provider)
->com.alibaba.dubbo.registry.integration.RegistryDirectory.InvokerDelegete#invoke(com.alibaba.dubbo.rpc.protocol.InvokerWrapper#invoke)
->com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper#invoke
->filter鏈--dubbo原生定義filter類定義在META-INF/dubbo/internal/com
	ConsumerContextFilter、FutureFilter等
->com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper#invoke
->com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker#invoke(com.alibaba.dubbo.rpc.protocol.AbstractInvoker#invoke)
	將RpcContext中的Attachment賦值invocation參數對象
	獲取async屬性並賦值
->com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker#doInvoke
	獲取return屬性,false則爲單向調用,直接返回空結果
	獲取async屬性,true則爲異步調用,返回結果存放到RpcContext的future屬性中
	雙向同步,等待調用結束後返回結果
->com.alibaba.dubbo.rpc.protocol.dubbo.ReferenceCountExchangeClient#send(單向)	#request(雙向)
->com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeChannel#send(單向)	#request(雙向)
->com.alibaba.dubbo.remoting.transport.netty.NettyChannel#send(com.alibaba.dubbo.remoting.transport.AbstractPeer#send)
->com.alibaba.dubbo.remoting.transport.netty.NettyChannel#send(com.alibaba.dubbo.remoting.transport.AbstractChannel#send)
->com.alibaba.dubbo.remoting.transport.netty.NettyChannel#send
	獲取sent屬性,設定等待時間
->NettyAPI

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