13 集成 K8s

dubbo 基于 3.2.6 版本

如果我们将 dubbo 应用部署在 k8s 环境中,我们就可以使用 k8s 作为注册中心

服务调用流程

  1. provider 使用 KubernetesServiceDiscovery#doRegister 注册服务实例元数据信息会存放在 pod 对象上.
  2. consumer 使用 ServiceNameMapping#getMapping 来获取 consumerUrl 对应的 serviceName.
  3. consumer 使用 KubernetesServiceDiscovery#getInstances 来获取 serviceName 对应的服务实例.
  4. 获取的服务实例上面就会有元数据信息,然后就会使用元数据信息来获取服务实例的所有 url 列表.
  5. 根据这些 url 列表来创建对应的 invoker,比如 DubboInvoker, TripleInvoker.

KubernetesServiceDiscovery#doRegister 注册实例

源码位置: org.apache.dubbo.registry.kubernetes.KubernetesServiceDiscovery#KubernetesServiceDiscovery

12 集成 Spring

dubbo 基于 3.2.6 版本

dubbo 集成 spring 的实现方式:

  1. 提供 ServiceAnnotationPostProcessor 来扫描 @DubboService 注解,导出服务
  2. 提供 ReferenceAnnotationBeanPostProcessor 来扫描 @DubboReference 注解,引用服务
  3. 提供 SpringExtensionInjector 来获取 springbean
  4. 提供 DubboInfraBeanRegisterPostProcessor注册相关类,加载 spring 配置

ServiceAnnotationPostProcessor

对一个 HelloService, 会注册两个 beanDefinition,分别为