只想摆烂
Java后端
·2025-06-17
Day 8 昨天把面试鸭上背八股又复习了一下加深印象,有很多基本都快忘完了。 今天把手写rpc的注解驱动写完了,算是完结了,但是之前的哪个tcp协议有报错,暂时搁置了,还得把那个写一下。 注解驱动,感觉也不是很难,定义好注解,配置好注解范围,然后定义spring容器初始化时的行为(初始化rpc,提供者启动服务器,消费者不需要启动)。 对于服务提供者,我们期望的是,给想要提供的服务添加上注解@RpcService ,就可以实现服务注册的功能,即,消费者可以通过注解来调用我们的服务。通过Spring的Bean监听机制,在Bean加载完成后,扫描含有@RpcService 注解的bean并获取注解的内容进行服务注册。 对于消费者,我们期望的是,添加注解注入对象后,可以直接调用对象的方法。这实际上是利用注解生成代理对象后注入到创建的对象上。在Bean加载完后,根据注解里的信息生成代理对象。 在这里我做了一些改进,也是从评论区看到的思路。在RpcReference注解中我们定义了很多属性比如重试机制,负载均衡的类别,但是在实际代码中是直接通过rpcConfig读取的默认配置,如果我们允许用户在注解中选中某些属性值,比如不用默认的负载均衡类型,而改用其他的,就需要将注解中的内容读出来,存储到一个map中,然后在动态代理时根据map里的信息从工厂中获取对应的实现类。 思路是, 1.创建一个新的生成代理对象方法,另外接收一个参数map,里面存放内容为注解内容 2.自定义一个RpcReference对象,对象属性为@RpcReference 内的内容,这里不能直接从该注解获取内容,因为如果导入starter依赖,就会造成循环依赖,所以我的解决方法是创建一个class对象。 3.在ServiceProxy中创建一个RpcReference属性,创建有参构造方法,接收map,将map中的值赋值给RpcReference,不必担心用户填了哪些值,哪些值没填,因为在@RocReference注解中已经对这些值写了默认值 4.在invoke方法中,将原来的从rpcConfig中获取字符串,从工厂实例化改为直接从RpcReference中获取字符串然后工厂创建。
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP