Apache Thrift with Java Quickstart(thrift入門およびJavaインスタンス)
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