首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Apache Thrift 跨語言服務開發框架完整指南

     編輯:Java 綜合教學

Thrift 簡介

Apache Thrift 是一個輕量級、跨語言的 RPC 框架,最初由 Facebook 開發,後捐贈 Apache 基金會。它透過介面定義語言(IDL)描述服務介面與資料結構,利用代碼生成引擎產生多種程式語言的客戶端/伺服器端存根,實現 C++、Java、Python、Go、PHP、Node.js 等 20+ 語言間的無縫互通。

核心架構分層

+------------------+
|  Service Layer   |  <- 用戶實作的業務邏輯(Processor)
+------------------+
|  Processor       |  <- 生成的處理器,解析請求、調用業務、序列化回應
+------------------+
|  Protocol        |  <- 序列化協議:Binary、Compact、JSON、SimpleJSON 等
+------------------+
|  Transport       |  <- 傳輸層:Socket、HTTP、Framed、Non-blocking、SSL 等
+------------------+
|  Server          |  <- 伺服器模型:Simple、ThreadPool、Nonblocking、HsHa、ThreadedSelector
+------------------+

IDL 定義範例

namespace java com.example.thrift

struct User {
    1: i64 id,
    2: string name,
    3: i32 age
}

service UserService {
    User getUser(1: i64 id),
    void saveUser(1: User user)
}

代碼生成命令

thrift -r --gen java user.thrift
# 生成 gen-java 目錄,包含 User、UserService.Iface、UserService.Processor 等

伺服器端開發步驟

  1. 實作 UserService.Iface 介面(業務邏輯)。
  2. 建立 TProcessor(new UserService.Processor(handler))。
  3. 建立 TServerTransport(如 TServerSocket(port))。
  4. 選擇協議工廠 TProtocolFactory(如 TBinaryProtocol.Factory())。
  5. 選擇伺服器型別並啟動:
// 簡單單執行緒測試用
TServer server = new TSimpleServer(new TServer.Args(serverTransport).processor(processor).protocolFactory(protocolFactory));

// 生產推薦:非阻塞 + 執行緒池
TNonblockingServerTransport nbTransport = new TNonblockingServerSocket(port);
THsHaServer.Args args = new THsHaServer.Args(nbTransport)
    .processor(processor)
    .protocolFactory(protocolFactory)
    .workerThreads(16);
TServer server = new THsHaServer(args);
server.serve();

客戶端開發步驟

  1. 建立 TTransport(TSocket(host, port) 或 TFramedTransport)。
  2. 建立 TProtocol(TBinaryProtocol(transport))。
  3. 建立 Client 存根(new UserService.Client(protocol))。
  4. transport.open(),呼叫 Client 方法,最後 transport.close()。

常用協議對比

協議特點適用場景
TBinaryProtocol二進制、簡單、效率中等一般 RPC、除錯方便
TCompactProtocol壓縮格式、體積小、CPU 稍高頻寬敏感、移動端
TJSONProtocolJSON 可讀、體積大Web 前端直連、除錯

伺服器模型選型指南

  • TSimpleServer:單執行緒阻塞,僅適合單元測試。
  • TThreadPoolServer:阻塞 I/O + 執行緒池,適合中低併發、計算密集型業務。
  • TNonblockingServer:NIO Selector 單執行緒輪詢,適合高併發短連線。
  • THsHaServer:Half-Sync/Half-Async,一個 I/O 執行緒 + Worker 池,平衡延遲與吞吐,推薦生產首選。
  • TThreadedSelectorServer:多 I/O 執行緒 + Worker 池,極高併發場景。

專案資源

完整範例:https://github.com/windwant/thrifttest

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved