什么是RPC
是一个跨进程的方法间调用
是一个计算机通信协议
特点:
通过网络,比如http,tcp(socket)
数据格式可扩展
传输方式可扩展
协议:
序列化,反序列化
实现
需要传递的参数:类,方法名,方法参数类型,入参
对于服务提供者:
提供服务接口和实现类
注册服务
暴露服务(通过netty,vertx,tomcat,jetty等)
不足:
对于使用JDK动态代理方式实现,客户端和服务端都依赖接口,相比于http提供的rest请求,客户端和服务端没有完全解耦
一个RPC调用实现过程分析
需要解决什么问题?
- 能够调用到服务端提供的接口实现类,此处可以使用反射
public interface HelloService {
String sayHello(String name);
}
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return "hello" + name;
}
}
- RPC调用本质是一个网络请求,服务端应该怎么暴露服务,可以通过tomcat,netty,vertx,jetty等方式暴露
对于服务端:
暴露服务,让客户端能进行访问
对于客户端: