美文网首页Java 杂谈程序员简更
手写RPC框架,我学会了什么?(二)

手写RPC框架,我学会了什么?(二)

作者: 日更专用小马甲 | 来源:发表于2019-03-09 09:12 被阅读6次

    上一篇 谈到了动态代理在RPC框架中的作用,这一篇会继续谈谈框架设计时的一些模型、理念和简单的思考。

    相关名词

    服务接口(Service Interface) 服务提供者和消费者沟通的“桥梁”,通常需要通过打包成jar发布出去,比如:

    public interfere IHelloService {
        String sayHi(String somebody);
    }
    

    服务实例类(Service Instance) 实现真正的业务逻辑,比如:

    public class HelloServiceImpl implements IHelloService {
        @Override
        String sayHi(String somebody) {
            return "Hello, " + somebody + "!";
        }
    }
    

    服务提供者(Service Provider) 提供服务的一方,实际上也是服务实例类运行的地方。

    服务消费者(Service Consumer) 使用服务的一方,调用接口提供的方法获得结果并进行后续处理,比如:

    IHelloService helloService = RpcClient.getRemoteInstanceProxy(IHelloService.class);
    String msg = helloService.sayHi("world");
    //- 返回:Hello, world!
    

    配置中心(Config Center) 提供服务提供者相关的信息,比如IP地址,监听的端口号,服务名等。比如:

    10.100.100.01:8000 IHelloService
    10.100.100.02:8000 IHelloService
    

    服务注册(Service Register) 服务提供者向配置中心推送自身信息的行为。

    框架需要做什么

    服务提供者启动后,首先生成服务实例类,并维护一个“类名-实例类”的映射关系(Map)。接着向配置中心进行服务注册。

    服务消费者启动后,首先从配置中心获得服务提供者的信息。接着尝试与某一个服务提供者建立通信。

    当服务消费者调用RpcClient.getRemoteInstanceProxy()时,通过动态代理获得服务接口的一个“傀儡”实例。当调用接口的具体方法时,“傀儡”实例会通过Socket将调用信息,比如:类名、方法名、方法参数等发送给提供者。

    提供者首先通过类名在Map中找到实例,再通过反射执行实例方法,最后再将执行结果回传给消费者。

    相关文章

      网友评论

        本文标题:手写RPC框架,我学会了什么?(二)

        本文链接:https://www.haomeiwen.com/subject/ewnjpqtx.html