Soul 学习笔记之 alibaba dubbo / apache dubbo (十二)

目录

    • 总系列目录地址
    • dubbo注册机制
    • dubbo访问机制
    • sofa注册和访问机制都跟dubbo类似
    • 总结

总系列目录地址

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。 这些都是被抽象出来的,具体实现由插件实现。

你可能感兴趣的:(java,网关)