代码下载:https://download.youkuaiyun.com/download/drsbbbl/12269042
无需积分
Spring 方面:
我把 对应的 接口 动态注入到 IOC容器中,并且给对应的接口生成对应的 动态代理类, 当有请求过来的时候 通过动态代理类,取出对应的参数,参数类型,类的类型,返回值类型 生成对应的请求对象,并且通过配置的 ip+port 的方式请求对应的 服务 并且得到对应的返回值,返回给调用者。
Redis 方面:
使用Redis 来模拟 Zookeeper 来模拟 注册中心。因为redis 本身来说 也是有 对应的 监听事件, 比如 对应的 移除key 的时候可以监听操作,还有新增key 的时候 , 都有一定的监听操作,具有 对应的 注册中心的特点,而且存储方式也是可以满足负载均衡的存储方式。还具有稳定性,响应速度高的特点(PS:我写的 没有写关于对应的监听的事件 )
Netty 方面:
在真实的 dubbo 框架中也是采用Netty 作为 通信的方式,不过我写的肯定没有 dubbo 那么全面 我只是 模拟最核心的一些步骤。还有关于 对应的心跳机制
看过mybatis +spring 源码的都知道 mapper接口注册到 IOC容器的中的操作。我们只需要 相同的操作 来一遍 就可以了 把我们需要 进行 远程调用的接口 动态注入到ioc 容器中 生成对应的代理对象
实现 BeanDefinitionRegistryPostProcessor 接口。我们进行 扫描包的操作

实现对应的 接口:
其中 这个地址 com.mbb.ann 这个 名字 在 dubbo 框架中 是配置对应的配置文件中, 我这里简写了

对应的 我们注入 beanFactory 来生成类 并加持上 autowire 属性 能够使用 autowire 注解

在beanFactory 中 为对应的对象生成对应的 动态代理类

关于redis讲解: 这里有redis 的取值:

我画下 我对redis 的存储结构

看到代码 你会发现。。怎么写反了。。没错 就是写反了。。当我想写 负载均衡的时候 发现事情不对 也就没改这个东西最近老是加班。。。。。。。。。。。。。。。。。。。。。反正正确应该这样
这样 就可以从对应的 服务列表中取出我们想要请求的服务了
封装请求实体类:

简单说明下这个类:
private Class<?> interfaceClass; 接口类型
private String methodName; 请求 这个类的那个方法
private Class<?>[] paramTypes; 方法参数类型
private Object[] args; 方法的参数
通过这几个参数 可以通过反射调用任何一个类的 任何方法
通过interfaceClass 可以得到对应的类型和名字 我这里很简陋。。。
applicationContext.getBean() 可以通过类型和名字在ioc 容器中找到对应的 类
String name = msg.getInterfaceClass().getSimpleName().substring(0, 1).toLowerCase() + msg.getInterfaceClass().getSimpleName().substring(1);
System.out.println(name);
Object bean = RpcServerConfiguration.applicationContext.getBean("testServiceImpl");Object bean = RpcServerConfiguration.applicationContext.getBean("testServiceImpl");
远程调用的过程;

写个注解》用于注解 实现接口:把 对应的服务注入到redis 中去

这就是 那一段 写反了代码。。。。。。。。。。。。。。。。。。。。。。。。把服务注到redis


Netty 部分 不在一一列举:都是模板代码
编码解码的过程 接收消息

本文介绍了一个自制的RPC框架实现,包括使用Spring动态代理处理远程调用,利用Redis模拟注册中心和负载均衡,以及采用Netty进行高效通信。通过具体代码示例,详细解释了框架的核心组件和工作流程。
393

被折叠的 条评论
为什么被折叠?



