Apache Thrift with Java Quickstart(thrift入門およびJavaインスタンス)

10494 ワード

    thrift       ,                 。                    ,     C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml             、     。

1.概要
Thriftは当初フェイスブックが開発し、07年4月にソースコードをオープンし、08年5月にapache孵化器に入った.thriftでは、簡単な定義ファイルのデータ型とサービスインタフェースを定義できます.入力ファイルとして、コンパイラは、RPCクライアントとサーバとの通信を容易に生成するためのシームレスなプログラミング言語を生成するためにコードを生成する.
公式サイトアドレス:thrift.apache.orgおすすめ見応えのある文章:http://thrift.apache.org/ http://thrift.apache.org/download http://jnb.ociweb.com/jnb/jnbJun2009.html http://wiki.apache.org/thrift
2.maven依存
Maven構築プロジェクトの場合はpomに直接xmlには、次の内容が追加されます.
<dependency>
  <groupId>org.apache.thrift</groupId>
  <artifactId>libthrift</artifactId>
  <version>0.9.2</version>
</dependency>

3.基本概念
3.1.データ型
基本タイプ:bool:ブール値、trueまたはfalse、Java対応boolean byte:8ビット符号整数、Java対応byte i 16:16ビット符号整数、Java対応short i 32:32ビット符号整数、Java対応int i 64: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:サービス対応クラス3.2.サービス側符号化の基本手順:
サービス処理インタフェースimplを実装TProcessorを作成TServerTransportを作成TProtocolを作成TServer起動サーバ3を作成する.クライアントエンコーディングの基本手順:
Transportを作成TProtocolを作成TTransportとTProtocolに基づいてClient呼び出しClientを作成する方法4.データ転送プロトコル
TbinaryProtocol:バイナリ形式.TCompactProtocol:圧縮形式TJSOnProtocol:JSON形式TSimpleJSOnProtocol:JSON書き込み専用プロトコルを提供し、生成されたファイルはスクリプト言語でtipsを解析しやすい:クライアントとサービス側のプロトコルが一致する
4、実例プレゼンテーション
その前に必ずthriftをインストールし、windowsにインストールしてもlinuxにインストールしてもいいです.thriftコマンドを実行してサービス側インタフェースを生成できればいいです.
4.1. ファイルaddを追加します.thrift、以下の内容が含まれています.
Google Protocol Bufferを使ったことがあるなら、次の操作に慣れていないに違いありません.
namespace java com.jamesfen.thrift  // java    
    typedef i32 int  //typedefs to get convenient names for your types 
    service AdditionService {  // defines the service to add two numbers 
    int add(1:int n1, 2:int n2), //defines a method 
}

4.2.サービス側インタフェースコードを生成し、次のコマンドを実行します.
thrift --gen java add.thrift

4.3. 実装インタフェース2ステップ目を操作すると、現在のディレクトリにgen-javaフォルダが生成され、AdditionServicesが含まれます.JAvaファイル、このクラスをあなたのパッケージにコピーします.実装する内部インタフェースがあり、インタフェースを実装します.
package com.jamesfen.thrift;
import org.apache.thrift.TException;
public class AdditionServiceHandler implements AdditionService.Iface{

    @Override
    public int add(int n1, int n2) throws TException {
      return n1 + n2;

    }
}

4.4.サービス側コード、AdditionServiceHandlerクラスのリスニングインタフェースを開きます(9090)
package com.jamesfen.thrift;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TServer.Args;
import org.apache.thrift.server.TSimpleServer;

public class MyServer {
    public static void StartsimpleServer(
            AdditionService.Processor<AdditionServiceHandler> processor) {
        try {
            TServerTransport serverTransport = new TServerSocket(9090);
            TServer server = new TSimpleServer(
                    new Args(serverTransport).processor(processor));
            // Use this for a multithreaded server
            // TServer server = new TThreadPoolServer(new
            // TThreadPoolServer.Args(serverTransport).processor(processor));
            System.out.println("Starting the simple server...");
            server.serve();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {

        StartsimpleServer(new AdditionService.Processor<AdditionServiceHandler>(
                new AdditionServiceHandler()));
     }
}

5.クライアントコード、要求サービス
package com.jamesfen.thrift;

import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

public class AdditionClient {

    public static void main(String[] args) {

        try {
            TTransport transport;
            transport = new TSocket("localhost", 9090);
            transport.open();
            TProtocol protocol = new TBinaryProtocol(transport);
            AdditionService.Client client = new AdditionService.Client(protocol);

            System.out.println(client.add(100, 200));

            transport.close();
        } catch (TTransportException e) {
            e.printStackTrace();
        } catch (TException x) {
            x.printStackTrace();
        }
    }

}

4.6.実行結果サービス側:Starting the simple server…クライアント:304.7:demoソースhttps://github.com/Bellonor/myhadoop2.x/tree/master/myhadoop2.x/src/main/java/com/jamesfen/thrift