1. 程式人生 > >Java基於String Boot、Thrift、Zookeeper實現RPC

Java基於String Boot、Thrift、Zookeeper實現RPC

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)
@Service
public 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: 服務消費端示例