暴露服务。类似平时网络编程写server,需要打开socket,监听端口等。只不过RPC有整套的封装。下面我们通过断点跟随源码,梳理下整个流程。
采用某种技术(spring?)获取到服务相关的所有配置后,就到了暴露服务的入口函数ServiceBean.afterPropertiesSet,接下来的调用链条是:
ServiceConfig.export ->
ServiceConfig.doExport ->
ServiceConfig.doExportUrls->
ServiceConfig.doExportUrlsFor1Protocol
ProxyFactory.getInvoker(ref, (Class) interfaceClass, url) // 获得invoker
Protocol.export(invoker) // 暴露服务?
Exchangers.bind(url, requestHandler) //
Transporters.bind(url, handler)
NettyTransporter.bind(url, ChannelHandler)
NettyServer.dopen()
相关细节分析
- ProtocolListenerWrapper 和 ProtocolFilterWrapper(串联filter调用链)
- spring加载启动一大堆
- ProxyFactory.getInvoker(ref, (Class) interfaceClass, url)
相关技术点:动态代理技术,代理模式
- 装饰模式
服务暴露前的注册:创建同注册中心的链接,然后再走真正的服务协议暴露流程。 Protocol利用装饰模式的体现:RegistryProtocol对Protocol的包装
- Protocol.export相关流程