- Apache Thrift 教程
- Apache Thrift - 首頁
- Apache Thrift - 簡介
- Apache Thrift – 安裝
- Apache Thrift - IDL
- Apache Thrift - 程式碼生成
- Apache Thrift - 服務實現
- Apache Thrift - 執行服務
- Apache Thrift - 傳輸層 & 協議層
- Apache Thrift - 序列化
- Apache Thrift - 反序列化
- Apache Thrift - 負載均衡
- Apache Thrift - 服務發現
- Apache Thrift - 安全考慮
- Apache Thrift - 跨語言相容性
- Apache Thrift - 微服務架構
- Apache Thrift - 測試和除錯
- Apache Thrift - 效能最佳化
- Apache Thrift - 案例研究
- Apache Thrift - 總結
- Apache Thrift 有用資源
- Apache Thrift - 有用資源
- Apache Thrift - 討論
Apache Thrift - 程式碼生成
在 Apache Thrift 中生成程式碼
從 Apache Thrift IDL 檔案生成程式碼是建立跨語言服務的重要步驟。
Thrift 編譯器 (thrift) 獲取 IDL 檔案並生成目標程式語言的原始碼,然後可以使用這些原始碼來實現和互動定義的服務。
本教程提供了有關如何使用 Apache Thrift 生成程式碼的詳細指南,包括設定環境、執行編譯器和處理生成的程式碼。
設定環境
在生成程式碼之前,請確保已安裝 Thrift 編譯器並且已正確配置開發環境。
- 安裝 Thrift 編譯器:在“Linux/macOS”中,請按照您的作業系統的安裝說明進行操作,例如對於 Ubuntu 使用“apt”,對於 macOS 使用“brew”。在“Windows”中,下載並安裝預編譯的二進位制檔案或使用 CMake 從原始碼構建。
- 驗證安裝:確認“thrift”命令在您的系統 PATH 中可用。
thrift --version
執行 Thrift 編譯器
Thrift 編譯器用於從 IDL 檔案生成各種程式語言的原始碼。以下是執行編譯器的方法
- 基本命令結構:生成程式碼的基本命令如下所示。將“<language>”替換為目標程式語言,並將“<path-to-idl-file>”替換為 Thrift IDL 檔案的路徑:
thrift --gen <language> <path-to-idl-file>
thrift --gen java service.thrift
thrift --gen py service.thrift
thrift --gen java --gen py service.thrift
理解生成的程式碼
生成的程式碼將包含各種檔案,具體取決於目標語言和 IDL 檔案的內容。以下是您可以期待的內容概述
Java 生成的程式碼
從 Thrift IDL 檔案生成 Java 程式碼時,輸出包含幾個關鍵元件,這些元件經過組織以方便實現和使用定義的服務。以下是每個元件和目錄結構的詳細說明:
- 資料型別:結構體、列舉和異常的 Java 類。
- 服務介面:IDL 中定義的服務的 Java 介面。
- 客戶端和伺服器存根:用於客戶端和伺服器端通訊的類。
以下是示例目錄結構:
gen-java/ ├── example/ │ ├── Color.java │ ├── Person.java │ └── Greeter.java └── TBinaryProtocol.java
其中:
- gen-java/:儲存所有生成的 Java 程式碼的根目錄。
- example/:包含根據 IDL 檔案中定義的名稱空間組織的生成的 Java 檔案的子目錄。
- Color.java:包含 IDL 中定義的 Color 列舉的 Java 列舉類。
- Person.java:包含 Person 結構體的 Java 類。
- Greeter.java:包含 Greeter 服務的 Java 介面。
- TBinaryProtocol.java:一個用於處理 Thrift 二進位制協議的實用程式類,該協議用於在 Thrift 中對資料進行編碼和解碼。
Python 生成的程式碼
從 Thrift IDL 檔案生成 Python 程式碼時,輸出包含各種 Python 模組,這些模組對應於 IDL 中定義的資料型別、服務介面和通訊存根。
這些模組的結構支援輕鬆整合到您的 Python 專案中。以下是每個元件和目錄結構的詳細說明
- 資料型別:結構體和列舉的 Python 類。
- 服務介面:服務方法的 Python 類。
- 客戶端和伺服器存根:用於客戶端和伺服器端通訊的 Python 模組。
以下生成的 Python 程式碼按映象 IDL 檔案中定義的名稱空間的目錄結構進行組織
gen-py/ ├── example/ │ ├── __init__.py │ ├── color.py │ ├── person.py │ └── greeter.py └── __init__.py
- gen-py/:儲存所有生成的 Python 程式碼的根目錄。
- example/:對應於 IDL 檔案中定義的名稱空間的子目錄。此目錄包含從 IDL 生成的 Python 模組。
- \_\_init\_\_.py:一個空檔案,它使 example 目錄成為一個 Python 包,允許您將生成的模組作為包匯入。
- color.py:包含 Color 列舉類,該類定義 Color 型別的列舉值。
- person.py:包含 Person 類,該類定義 Person 結構體的結構和屬性。
- greeter.py:包含 Greeter 服務類,包括 greet 和 getAge 等方法。
- \_\_init\_\_.py:根級別上的另一個 \_\_init\_\_.py 檔案,如果將整個 gen-py 目錄視為 Python 包,則可以使用該檔案。
整合生成的程式碼
生成程式碼後,請按如下方式將其整合到您的專案中
對於Java 整合
- 包含生成的程式碼:將“gen-java”目錄新增到 Java 專案的構建路徑中。
- 編譯和使用:將生成的程式碼與您的專案程式碼一起編譯,並使用生成的類和介面來實現和互動服務。
對於Python 整合
- 包含生成的程式碼:將“gen-py”目錄新增到 Python 路徑中。
- 匯入和使用:在您的 Python 程式碼中匯入生成的模組,並使用類和方法來實現和互動服務。
編譯和執行程式碼
從 Thrift IDL 檔案生成程式碼後,下一步是(如果需要)編譯並執行您的應用程式。
Java 編譯和執行
在 Java 中,生成程式碼後,您需要將生成的類與您編寫的任何其他 Java 程式碼一起編譯。以下是您可以執行此操作的方法
編譯 Java 程式碼
- 使用“javac”命令編譯生成的 Java 檔案和您編寫的任何自定義 Java 程式碼。
- 在類路徑中包含生成的程式碼路徑和任何必需的 Thrift 執行時庫。
- 例如,如果您有一個包含 Java 檔案的“src”目錄和一個包含生成的程式碼的“gen-java”目錄,則可以像這樣編譯它:
javac -d bin -cp path/to/thrift/lib/* src/**/*.java gen-java/**/*.java
執行 Java 應用程式
- 編譯後,您可以使用“java”命令執行 Java 應用程式。
- 確保在類路徑中包含編譯後的類和必要的庫。
- 例如,如果您的主類是“com.example.Main”,則可以像這樣執行它:
java -cp bin:path/to/thrift/lib/* com.example.Main
Python 執行
Python 不需要編譯步驟,因為它是一種解釋型語言。生成 Thrift 程式碼後,您可以直接執行 Python 指令碼。以下是您可以執行此操作的方法
執行 Python 程式碼
- 確保您的 Python 指令碼可以訪問生成的程式碼,通常是透過將“gen-py”目錄新增到 Python 路徑中。
- 您可以透過從包含“gen-py”的根目錄執行指令碼或修改“PYTHONPATH”環境變數來實現。
- 例如,如果您的指令碼名為“client.py”並且與“gen-py”位於同一目錄中,則可以像這樣執行它:
python client.py
Python 路徑設定
- 如果您需要手動設定 Python 路徑,則可以透過匯出“PYTHONPATH”環境變數來實現:
export PYTHONPATH=$PYTHONPATH:/path/to/gen-py
import sys
sys.path.append('/path/to/gen-py')
驗證執行
您可以如下所示驗證Java的執行
- 檢查控制檯輸出以驗證您的 Java 應用程式是否按預期執行,無論它是在啟動 Thrift 伺服器還是發出客戶端請求。
- 處理出現的任何異常或錯誤,這些錯誤通常與網路問題或不正確的類路徑設定有關。
驗證Python的執行,如下所示
- 檢查控制檯輸出以確認您的 Python 指令碼是否按預期執行 Thrift 服務操作。
- 確保所有必要的模組都已正確匯入並且 Thrift 服務可訪問。