Thrift入門及Java實例演示



目錄:

  • 概述
  • 下載配置
  • 基本概念
    1. 數據類型
    2. 服務端編碼基本步驟
    3. 客戶端編碼基本步驟
    4. 數據傳輸協議
  • 實例演示(java)
    1.  thrift生成代碼
    2.  實現接口Iface
    3. TSimpleServer服務模型
    4. TThreadPoolServer 服務模型
    5. TNonblockingServer 服務模型
    6. THsHaServer服務模型
    7. 異步客戶端

[一]、概述

Thrift是一個軟件框架,用來進行可擴展且跨語言的服務的開發。它結合了功能強大的軟件堆棧和代碼生成引擎,以構建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等編程語言間無縫結合的、高效的服務。

Thrift最初由facebook開發,07年四月開放源碼,08年5月進入apache孵化器。thrift允許你定義一個簡單的定義文件中的數據類型和服務接口。以作爲輸入文件,編譯器生成代碼用來方便地生成RPC客戶端和服務器通信的無縫跨編程語言。

官網地址:thrift.apache.org

推薦值得一看的文章:

[二]、下載配置

到官網下載最新版本,截止今日(2012-06-11)最新版本爲0.8.0.

1. 如果是Maven構建項目的,直接在pom.xml 中添加如下內容:

2.如果自己編譯lib包,把下載的壓縮包解壓到X:盤,然後在X:\thrift-0.8.0\lib\java 目錄下運行ant進行自動編譯,會在X:\thrift-0.8.0\lib\java\build\ 目錄下看到編譯好的lib包:libthrift-0.8.0.jar

[三]、基本概念

1.數據類型

  • 基本類型:
    • bool:布爾值,true 或 false,對應 Java 的 boolean
    • byte:8 位有符號整數,對應 Java 的 byte
    • i16:16 位有符號整數,對應 Java 的 short
    • i32:32 位有符號整數,對應 Java 的 int
    • i64:64 位有符號整數,對應 Java 的 long
    • double:64 位浮點數,對應 Java 的 double
    • string:utf-8編碼的字符串,對應 Java 的 String
  • 結構體類型:
    • struct:定義公共的對象,類似於 C 語言中的結構體定義,在 Java 中是一個 JavaBean
  • 容器類型:
    • list:對應 Java 的 ArrayList
    • set:對應 Java 的 HashSet
    • map:對應 Java 的 HashMap
  • 異常類型:
    • exception:對應 Java 的 Exception
  • 服務類型:
    • service:對應服務的類

2.服務端編碼基本步驟:

  • 實現服務處理接口impl
  • 創建TProcessor
  • 創建TServerTransport
  • 創建TProtocol
  • 創建TServer
  • 啓動Server

3.客戶端編碼基本步驟:

  • 創建Transport
  • 創建TProtocol
  • 基於TTransport和TProtocol創建 Client
  • 調用Client的相應方法

4.數據傳輸協議

  • TBinaryProtocol : 二進制格式.
  • TCompactProtocol : 壓縮格式
  • TJSONProtocol : JSON格式
  • TSimpleJSONProtocol : 提供JSON只寫協議, 生成的文件很容易通過腳本語言解析

tips:客戶端和服務端的協議要一致

[四]、實例演示

1. thrift生成代碼

創建Thrift文件:G:\test\thrift\demoHello.thrift ,內容如下:

目錄結構如下:

thrift-0.8.0.exe 是官網提供的windows下編譯工具,運用這個工具生成相關代碼:

生成後的目錄結構如下:

將生成的HelloWorldService.java 文件copy到自己測試的工程中,我的工程是用maven構建的,故在pom.xml中增加如下內容:

2. 實現接口Iface

java代碼:HelloWorldImpl.java

3.TSimpleServer服務端

簡單的單線程服務模型,一般用於測試。

編寫服務端server代碼:HelloServerDemo.java

編寫客戶端Client代碼:HelloClientDemo.java

先運行服務端程序,日誌如下:

再運行客戶端調用程序,日誌如下:

測試成功,和預期的返回信息一致。

4.TThreadPoolServer 服務模型

線程池服務模型,使用標準的阻塞式IO,預先創建一組線程處理請求。

編寫服務端代碼:HelloServerDemo.java

客戶端Client代碼和之前的一樣,只要數據傳輸的協議一致即可,客戶端測試成功,結果如下:

5.TNonblockingServer 服務模型

使用非阻塞式IO,服務端和客戶端需要指定 TFramedTransport 數據傳輸的方式。

編寫服務端代碼:HelloServerDemo.java

編寫客戶端代碼:HelloClientDemo.java

客戶端的測試成功,結果如下:

6.THsHaServer服務模型

半同步半異步的服務端模型,需要指定爲: TFramedTransport 數據傳輸的方式。

編寫服務端代碼:HelloServerDemo.java

客戶端代碼和上面 4 中的類似,只要注意傳輸協議一致以及指定傳輸方式爲TFramedTransport

7.異步客戶端

編寫服務端代碼:HelloServerDemo.java

編寫客戶端Client代碼:HelloAsynClientDemo.java

先運行服務程序,再運行客戶端程序,測試結果如下:

————

原創文章,轉載請註明: 轉載自micmiu – 軟件開發+生活點滴[ http://www.micmiu.com/ ]

本文鏈接地址: http://www.micmiu.com/soa/rpc/thrift-sample/

發佈了0 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章