Java基于String Boot、Thrift、Zookeeper实现RPC

来源:互联网 发布:遥控器淘宝 编辑:程序博客网 时间:2024/06/08 11:29

Thrift的优势是支持异构系统,相对于http协议效率较高,之前项目一直用的是dubbo,最近想了解一下thrift相关内容,以下是尝试工程中的一些内容,做一些记录

说明

1.代码基于JDK8、spring/boot实现
2.注册发现采用zookeeper
3.Thrift Sockect连接池使用commons-pool2实现
4.使用TMultiplexedProcessor发布多个服务

代码实现分为服务端(provider)和客户端(consumer),实际使用过程中一个项目可能既是服务端又是客户端

服务端

ThriftService: 注解类,标识需要暴露的服务,可以指定版本号version,权重weight,例如:

@ThriftService(version="1.1.2", weight=3)@Servicepublic class OrderServiceImpl implements OrderService.Iface{}

ThriftServerRegistry: 将暴露的服务注册到zookeeper,注册格式如下:

|rpc //root节点|- com.github.thrift.service1.user.UserService_1.1.1  //Persistent节点|-- 192.168.1.21:8089:3  //ip:port:weight, Ephemeral节点|-- 192.168.1.22:8089:2  //ip:port:weight, Ephemeral节点

客户端

ThriftReference: 注解类,标识需要消费的服务,可以指定服务版本号version,例如:

public class ConsumerService{    @ThriftReference(version="1.1.1")    UserService.Iface userClient;}   

ThriftServerDiscovery: 发现服务,并生成响应缓存
ThriftConsumerProxy: 生成服务代理
ThriftSocketPoolFactory: 工厂类,采用commons-pool2生成Thrift TSocket连接池
ThriftRefAnnBeanPostProcessor: 扫描含有ThriftReference注解的属性或者set方法,调用ThriftConsumerProxy的方法注入代理类

详细代码请查看github
项目结构
thrift-consumer: 服务消费端封装
thrift-provider: 服务提供端封装
thrift-service1-api: Thrift代码,供服务端和消费端引用
thrift-service1-core: 服务提供端示例
thrift-service2-core: 服务消费端示例

原创粉丝点击