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

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