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

本文概述了Soul、Dubbo和SOFA的插件机制,重点介绍了它们如何通过SPI加载和注册服务,以及访问过程中的统一与定制化。详细解析了各自的注册和访问流程,并强调了插件结构的通用性和差异化特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总系列目录地址

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值