1. 程式人生 > 其它 >Soul 學習筆記之 alibaba dubbo / apache dubbo (十二)

Soul 學習筆記之 alibaba dubbo / apache dubbo (十二)

技術標籤:java閘道器

目錄

總系列目錄地址

dubbo相關資料可以看官網

dubbo註冊機制

  1. 載入starter, soul-spring-boot-starter-client-alibaba-dubbo。如:SoulAlibabaDubboClientConfiguration/SoulApacheDubboClientConfiguration
  2. 載入bean, AlibabaDubboServiceBeanPostProcessor, 各種框架協議的各自實現。
    2.1 初始化時啟動一個執行緒池,poolSize=1
    2.2 onApplicationEvent 開始註冊服務, 通過 Spring ContextRefreshedEvent 找所有 dubbo.ServiceBean。
    2.3 handler, 找 SoulDubboClient 註解把相關的服務通過 okClient 傳送到 admin,通過放射方式拿到註解方法裡面的各種引數。
    日誌列印:
    2021-01-28 06:35:00.123  INFO 12864 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils  : dubbo client register success: {
    "appName":"dubbo","contextPath":"/dubbo","path":"/dubbo/findByStringArray","pathDesc":""...

總的來說,dubbo 外掛程式碼都是一樣的,通過 spi 機制載入,具體實現放在 xxxPostProcessor 裡面,由 spring ContextRefreshedEvent 找到 jvm 裡的 dubbo.ServiceBean,經過處理生成 json 通過 http post 方式註冊到 admin。

dubbo訪問機制

  1. 訪問統一介面 SoulWebHandler, 責任鏈模式,一層一層執行直到 AlibabaDubboPlugin
  2. 先執行AbstractSoulPlugin 模板方法裡面的 execute, 最終執行到具體實現方法 AlibabaDubboPlugin.doExecute, 執行 plugin 裡自定義的動作
  3. alibabaDubboProxyService.genericInvoker

sofa註冊和訪問機制都跟dubbo類似

總結

外掛機制都是使用 soul 屬性的 starter 方式,基本上所有功能都以SPI方式註冊。每個 plugin 的實現都不一樣, 但是統一了抽象方法。
觀察發現 dubbbo/sofa 的外掛結構都是一樣的,cache,handler,proxy,response,subscriber。 這些都是被抽象出來的,具體實現由外掛實現。