Apache Thrift之java入門

一、開發環境(清單1)
1.操作系統
    Server-Linux / Client-WinXP
2.SDK
    Sun JDK1.5+

3.需要的jar依賴包
    libthrift.jar
    slf4j-api-1.5.8.jar
    slf4j-log4j12-1.5.8.jar
    log4j-1.2.15.jar

4.編譯工具
    Apache Ant  & Apache ivy

二、安裝/配置 (清單2)
    1.下載thrift源文件
        http://labs.renren.com/apache-mirror//incubator/thrift/0.5.0-incubating/thrift-0.5.0.tar.gz
        
    2.編譯thrift源文件
        1)解壓 thrift-0.5.0.tar.gz 
        2)用ant編譯源代碼,進入x:\thrift-0.5.0\lib\java目錄,執行ant,通過ant中的ivy工具會自動從站點下載所需要的依賴包,編譯完成後如圖所示:
         http://zcitrq.bay.livefilestore.com/y1pA4vlwBHBEPK_vNd4oVbU_egUdTTdw7fKAW_rmoBiqEg-ZO8rfDednCMCylQqrM1SpKVOp49bbbD0rfMhiaRHwq93o5RHaQUG/complie-thirtf.png?psid=1
        3)編譯過程中下載的依賴包在x:\thrift-0.5.0\lib\java\build\ivy\lib 目錄下可以看見下載的jar依賴包,將編譯成功以後的jar包加入Eclipse的開發環境中。

三、腳本文件(清單3)
    1.創建腳本
        創建腳本文件 testJava.thrift ,腳本文件內容如下:
        namespace java com.javabloger.gen.code   # 註釋1   定義生成代碼的命名空間,與你需要定義的package相對應。

        struct Blog {   #  註釋2.1   定義實體名稱和數據結構,類似你業務邏輯中的pojo get/set
            1: string topic     #  註釋2.2  參數類型可以參見 Thrift wiki   
            2: binary content  
            3: i64    createdTime
            4: string id
            5: string ipAddress
            6: map<string,string> props
          }
        service ThriftCase {  #  註釋3    代碼生成的類名,你的業務邏輯代碼需要實現代碼生成的ThriftCase.Iface接口
            i32 testCase1(1:i32 num1, 2:i32 num2, 3:string  num3) #註釋4.1 方法名稱和方法中的入參,入參類型參見wiki
            list<string> testCase2(1:map<string,string>  num1)
            void testCase3()
            void testCase4(1:list<Blog> blog)   #  註釋4.2   list 是thrift中基本數據類型中的一種,list中包含的Blog對象是上面struct中定義的
        }

    2.運行腳本
        1)從 thrift 站點下載windows版本的編譯工具,下載地址:http://labs.renren.com/apache-mirror//incubator/thrift/0.5.0-incubating/thrift-0.5.0.exe
        2)通過Thrift的腳本文件,運行 thrift 命令創建生成的代碼,例如:執行 thrift -gen java x:\testJava.thrift  命令,在當前運行的盤符下,可看見gen-java目錄,在這裏目錄中可以看見生成的java代碼,更多thrift 命令內容,請參見thrift命令自帶的help。

3.Thrift 中的基本數據類型 (清單4)
    類型 描述
    bool truefalse
    byte 8位的有符號整數
    i16 16位的有符號整數
    i32 32位的有符號整數
    i64 64位的有符號整數
    double 64位的浮點數
    string UTF-8編碼的字符串
    binary 字符數組
    struct 結構體
    list 有序的元素列表,類似於STL的vector
    set 無序的不重複元素集,類似於STL的set
    map key-value型的映射,類似於STL的map
    exception 是一個繼承於本地語言的exception基類
    service 服務。包含多個函數接口(純虛函數)

 

四、創建代碼(清單5)
    我將示例工程分了4個包,如下所示:
     \com\javabloger
            \client               # 1.客戶端測試代碼
            \gen\code              # 2.通過腳本生成的class
            \layer\transport       # 3.服務器端代碼和定義的傳輸協議
            \layer\business      # 4.具體的業務邏輯代碼
    具體代碼內容這裏就不闡述了,重點是要明白代碼的結構和層次關係,其次是裏面主要的幾個類的含義,至於代碼是怎麼寫的並不是非常重要,僅僅是我個人觀點,僅供參考,謝謝。

代碼示例的下載地址: http://javabloger-mini-books.googlecode.com/files/Thritf.zip

五、運行程序
    先運行server,再運行client ,客戶端向服務器端發送數據調用服務器端的4個方法,服務器端被傳入客戶端數據,運行效果如圖所示:
    run-thirtf-code.png


轉自:http://www.javabloger.com/article/thrift-java-code-example.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章