手写一个RPC远程调用(基于netty、反射和代理)

本文介绍了如何手写一个基于Netty、反射和动态代理的RPC远程调用实现。项目包含三个模块,分别处理公共部分、服务器端和服务调用客户端。讲解了在Netty框架下,如何进行编码、解码,以及如何通过反射和动态代理获取方法信息,完成服务端的调用和客户端的请求过程。文章以一个简单的例子展示了RPC调用的全过程。

首先呢,我们的这个项目是基于netty、动态代理、反射等知识实现的,如果童鞋们对这块内容还有不熟的地方,建议去先了解一下这些知识,再来看这篇文章,我觉得才有意义。
项目结构:

这里有三个module,先说common,它里面主要包含了我们的client和server共同的东西(一会细说),它是以依赖形式在我们的其他两个子项目中的pom.xml里的。server,里面包含了我们的一个服务器,具体的serviceimpl实现的类,client,里面包含了我们的客户端。这两个就是client调用的server的方法(注意这里不是通过rest接口实现的)。这两个项目可以独立部署在服务器上也是可以的。
common


这里的ClassInfo是我们要传递的类的信息,一会大家就很清楚了(悄悄的透露一下,就是下面两个service的方法具体信息)。它是建立我们调用的核心!!!下面两个service就是我们要远程调用他们的实现类的。

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
package com.rpc.common.enity;
  
import lombok.Data;
  
import java.io.Serializable;
  
@Data
public class ClassInfo implements Serializable {
  
  
    private String className;
  
    private String methodName;
  
    private Class<?>[] types;
  
    private Object[] objects;
  
}


这个老哥就详细的记录着我们调用方法的接口方法的类名、方法名、参数类型和参数s。奥力给!!

[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
5
package com.rpc.common.service;
  
public interface HelloService {
    String helloRPC();
}

 

[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
5
package com.rpc.common.service;
  
ublic interface HiService {
    String HiRPC(String name);
}


这两个就是普通的接口,就是我们在dubbo框架中熟悉的@Service下面的接口。在dubbo里就是通过这个注册中心注册的。
Server

先看看这两个没啥好说的实现类吧

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.rpc.server.impl;
  
import com.rpc.common.service.HelloService;
  
public class HelloServiceImpl implements HelloService {
  
    @Override
    public String helloRPC() {
        return "helloRPC";
    }
}
  
  
package com.rpc.server.impl;
  
import com.rpc.common.service.HiService;
  
public class HiServiceImpl implements HiService {
  
    @Override
    public String HiRPC(String name) {
        return "Hi" + name;
    }
}

 

然后就是我们的netty啦,真的是方便又安全的框架!!

 

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19 <
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值