手写dubbo

47 阅读1分钟

生产端

  1. 提供接口和实现类并通过tomcat或netty发布接口
  2. 本地新建MAP保存服务名+版本号对应的接口实现
  3. 本地服务的URL列表以及请求协议发布到注册中心map

注册中心

  1. 实现组件:redis,zk,nacos
  2. 新建MAP<接口名,List>保存服务名对应的提供者的ip列表
  3. map的每个ip都设置过期时间,如果过期了还没收到生产端的心跳则剔除该ip
  4. ip列表有变动通过zk的watch机制或redis的订阅模式通知消费者修改ip

消费端

  1. 拉取通过服务名拉取注册中心的的List列表在本地保存
  2. 通过动态代理+负载均衡策略远程调用服务对应的接口(传递接口名,方法名,版本号,协议名,参数值,参数类型)
  3. 如果有报错则增加容错机制
  4. 对于ip调不通重试n次,如果还不通则剔除url列表
  5. 增加mock代码方便消费者调试本地代码