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