基于Socket的RPC服务端架构
针对guide-rpc-framework开源项目,主要记录在源码阅读过程中的一些理解,本文描述了项目中由Socket实现的RPC服务端架构,项目以zookeeper作为注册中心。
一、Socket服务端的启动流程
- 创建服务提供者(接收客户端消息后,实际执行方法的对象)
- 创建socket服务对象
- 创建rpc配置对象
- 在配置对象中注册服务提供者
- 在socket服务对象中注册rpc配置对象
- 开启socket服务,接收客户端的请求
二、重要组件说明
1. 服务提供者
- 服务提供者需要实现公有接口(服务消费者也可以访问的接口),以便客户端生成对应的代理对象
- 服务提供者中需要实际实现公有接口中的方法
2. socket服务对象
- 包含两个属性
-
私有线程池
当客户端向服务端发送请求建立socket连接时,服务端将此socket连接打包成一个rpc请求处理器(包括请求解析,请求执行,返回值获取,返回值发送等功能的Runnable对象),将此处理器提交给线程池处理。每个线程中IO是阻塞的,每建立一个连接,就需要提交一个线程。 -
服务提供池
用来添加、发布和获取服务,是实际与zookeeper交互的对象,使用Map根据服务名称保存服务提供者,在发布时会将将rpc访问地址发布到zookeeper上。
-
- 包含三个主要方法
- 构造方法
用来初始化线程池和服务提供池,可在其中定义两者的具体实现,现有的服务提供池为zookeeper实现。 - 服务注册方法
调用服务提供池的服务发布方法,将rpc配置对象中注册的服务发布出去。 - 服务启动方法
绑定服务端口,启动服务器,监听客户端请求,监听到请求后,打包socket连接,提交给线程池处理。
- 构造方法
3. rpc配置对象
- rpc配置对象打包了服务提供者(一对一)
- 用于方便地获取服务提供者的名称以及对应的rpc服务名称
- 从rpc配置对象中也可以获取服务提供者