从0到1实现RPC | 06 代码重构

本文描述了对ZK注册中心的重构过程,重点在于改进启动与销毁流程,确保服务注册与取消的正确执行。同时,通过类型转换、接口设计和元数据类的封装,提高了代码可读性、可复用性和扩展性,实现了业务逻辑与非功能性逻辑的分离以及类的解耦和职责单一化。
摘要由CSDN通过智能技术生成
  1. ZK注册中心ZkRegistryCenter的的启动与销毁

重构前,初始化和销毁方法依赖于bean的生命周期。

图片

这样带来的问题是当整个服务停止时,销毁方法先执行,客户端和zk服务端已经断开连接,而服务取消注册的逻辑再执行时,就不会成功。

图片

由于取消注册使用的是quietly()方式,出错了也不会报错,最终就是服务没有取消成功,消费者还可能调用到。

图片

重构后,注册中心先启动成功,在进行服务注册。服务销毁时,先取消注册,在关闭连接。

图片

  1. 抽取类型转换逻辑到工具类TypeUtils中。

这样带来的好处是业务功能和非业务功能逻辑分离,提高代码可读性和可复用性。

图片

  1. 网络客户端封装为接口

图片

定义HttpInvoker接口,添加当前使用的方式OkHttp作为客户端。这样基于接口设计带来的好处时想使用其他客户端时就很方便替换,不需要改变上层逻辑,添加新的实现类即可。

图片

  1. 封装ServiceMeta和InstanceMeta

图片

使用ServiceMeta代替String类型,来表示一个服务的元数据,表达含义更加丰富,支持更多非功能性场景。

图片

同理,使用InstanceMeta代替String类型,来表示一个实例的元数据,表达含义更加丰富,支持更多非功能性场景。

图片

  1. 封装ProviderInvoker

将服务提供者的调用逻辑抽出独立的类,职责更单一。

图片

此次,重构的要点

  1. 业务功能和非功能性逻辑分开,提高可读性和可扩展性。
  2. 使用保证类型替换String类型,丰富表达含义。
  3. 工具类抽取,提高复用性。
  4. 基于接口做设计,提高扩展性。
  5. 类职责保持单一,解耦,类聚。

源码:

https://github.com/midnight2104/midnight-rpc/tree/lesson6

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值