dubbo釋出和呼叫服務
1.釋出服務
<!-- 宣告需要暴露的服務介面 -->
<dubbo:protocol name="dubbo" port="9092"/>
<dubbo:service interface="IConfigReadService" ref="config_read_service" protocol="dubbo"/>
<!-- 具體的實現bean -->
<bean id="config_read_service" class="ConfigReadServiceImpl" />
dubbo釋出一個服務,是隨著spring容器啟動完成的。具體是:會先讀取配置xml,然後解析名稱空間,觸發對應名稱空間的註冊的handler處理器,解析<dubbo:service>會生成ServiceBean,因為沒有配置delay屬性,所以是在容器初始化所有bean,會在Spring容器初始化完成,接收到ContextRefreshedEvent事件,呼叫onApplicationEvent,暴露dubbo服務,啟動netty server繫結埠.
2.呼叫服務
<dubbo:reference id="demoService"interface="com.alibaba.dubbo.demo.DemoService" />
使用demoService呼叫的時候,會觸發代理物件方法的呼叫(因為這個物件的引用是個動態代理物件),呼叫InvokerInvocationHandler的 invoke方法
2.呼叫
3.走到ListenerInvokerWrapper 傳遞給內部的invoker.invoke(invocation)
4. 經過一系列的filter和invoker
5.最後到DubboInvoker傳送netty訊息