Dubbo版本是2.7.3.Release.
上一章分析过消费端的Invoker调用流程,今天着重分析下服务提供者的Invoker调用流程
从上一篇中可以知道消费者调用最终通过NettyServer接受消费者发送的RpcInvocation的message消息,这里看到ChannelPipeline加入了解码器和编码器以及NettyHandler处理类
- 从ExchangeChannel中获取port,path,invocation的attachment中的version和group信息构造serviceKey,从serverMap中获取ServiceExporter
- 然后从ServiceExporer获取的Invoker,并进行Invoker的invoker调用.
由于之前服务提供者启动过程中可以知道服务导出都是由ServiceBeanz这个里面完成,这里是 通过ProxyFactory进行getInvoker构造代理类,然后通过Protocol的export进行协议导出. 服务提供者通过JavassistProxyFactory的getInvoker构造的Invoker对象,这里生成的AbstractProxyInvoker的匿名内部类, 这里主要是调用Wrapper的makeWrapper方法拼接字符串生成代理类,主要是利用javassist操作字节码的生成, 服务提供端获取对应的Invoker对象,并进行AbstractProxyInvokerr调用invoke方法,并回调用代理类的doInvoke方法,并调用wrapper类的invokeMethod方法实现对接口的实现类的调用.
总结
今天分析了服务提供者的Invoker执行过程,其中主要就NettyServer的channel的pipeline的绑定channel的构造以及Invoker代理调用过程.