深入理解Apache Dubbo与实战-第5章《Dubbo启停原理解析》总结

1、配置解析

  • 基于XML配置原理解析:主要解析逻辑入口是在DubboNamespaceHandler类中完成的,其主要把不同的标签关联到解析实现类中;
  • 基于注解配置原理解析:注解处理逻辑主要包含3部分内容,第一部分是如果用户使用了配置文件,则框架按需生成对应Bean,第二部分是要将所有使用Dubbo的注解@Service的Class提升为Bean,第三部分要为使用@Reference注解的字段或方法注入代理对象。

@Service服务注解扫描和注册:

1)Dubbo框架首先会提取用户配置的扫描包名称;

2)开始真正的注解扫描;

3)配置扫描@Service注解作为过滤条件;

4)将@Service标注的服务提升为不同的bean;

5)根据注册的普通的Bean生成ServiceBean的占位符,用于Spring启动后的服务暴露。

@Refrence消费注解注入:

1)查找Bean所有标注了@Reference的字段和方法;

2)对字段、方法进行反射绑定;

3)遍历服务类所有的字段,查找Reference注解标注。

2、服务暴露的实现原理

  • 配置承载初始化:

1)-D传递给JVM参数优先级最高;

2)代码或XML配置优先级次高;

3)配置文件优先级最低。

  • 远程服务的暴露机制:

Dubbo框架做服务暴露分为两大部分:第一步将持有的服务实例通过代理转换成Invoker,第二步会把Invoker通过具体的协议(比如Dubbo)转换成Exporter。这里的Invoker可以简单理解成一个真实的服务对象实例。

1)主要通过反射获取配置对象并放到map中用于后续构造URL参数;

2)主要区分全局配置;

3)主要处理本地内存JVM协议暴露;

4)主要追加监控上报地址,框架会在拦截器中执行数据上报,这部分是可选的;

5)通过动态代理的方式创建Invoker对象,在服务端生成的是AbstractProxyInvoker实例,所有真实的方法调用都会委托给代理,然后代理转发给服务ref调用;

6)主要先触发服务暴露,然后进行服务元数据注册;

7)主要处理没有使用注册中心的场景,直接进行服务暴露,不需要元数据注册。

  • 注册中心控制服务暴露:

1)打开端口,把服务实例存储到map;

2)创建注册中心实例;

3)服务暴露之后,注册服务元数据;

4)监听服务接口下configurators节点,用于处理动态配置;

5)Invoker销毁时注销端口和map中服务实例等资源;

6)移除已注册的元数据;

7)去掉订阅配置监听器。

3、服务消费的实现原理

在整体上看,Dubbo框架做服务消费也分为两大部分,第一步通过持有远程服务实例生成Invoker,这个Invoker在客户端是核心的远程代理对象。第二步会把Invoker通过动态代理转换成实现用户接口的动态代理引用。

1)默认检查是否适同一个JVM内部调用;

2)直接使用injvm协议从内存中获取实例;

3)注册中心地址后天添加refer存储服务消费元数据信息;

4)单注册中心消费;

5)逐个获取注册中心的服务,并添加到invokers列表;

6)通过Cluster将多个Invoker转换成一个Invoker;

7)把Invoker转换成接口代理。

  • 通过注册中心消费

1)设置具体注册中心协议,比如ZooKeeper;

2)创建具体注册中心实例;

3)根据配置处理多分组结果聚合;

4)处理订阅数据并通过Cluster合并多个Invoker;

5)消费核心关键,持有实际Invoker和接收订阅通知;

6)注册消费信息到注册中心;

7)订阅服务提供者、路由和动态配置;

8)通过Cluster合并Invokers。

4、优雅停机原理解析

1)收到kill9进程推出信号,Spring容器会触发容器销毁事件;

2)provider端会取消注册服务元数据信息;

3)consumer端会收到最新地址列表(不包含准备停机的地址);

4)Dubbo协议会发送readonly事件报文通知consumer服务不可用;

5)服务端等待已经执行的任务结束并拒绝新任务执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值