Thrift 之 安裝與測試

Thrift是跨語言的服務部署框架,最初由Facebook於2007年開發,2008年進入Apache開源項目

最新版本:0.9.2由於需要運行在Java 1.7 所以使用了0.8.0版本 下載地址如下:http://archive.apache.org/dist/thrift/0.8.0/

在linux上安裝如下:

    1 執行tar xvf thrift-0.8.0.tar.gz

    2 cd thrift-0.8.0

    3 執行:./configure & make

    4 執行:make install


在thrift-0.8.0同級目錄下創建:thrift文件夾

     1 cd thrift

      2 生成Hello.thrift

namespace java cdv
service Hello{
  string helloString(1:string para)
  i32 helloInt(1:i32 para)
  bool helloBollean(1:bool para)
  void helloVoid()
}

   3 執行:thrift -gen java  Hello.thrift

      在同級目錄中生成 gen-java目錄,在該目錄下生成cdv/Hello.class文件


在Eclipse中引入:

1  cdv/Hello.class文件

2  進入:thrift-0.8.0/lib/java目錄,執行:ant   命令進行打包在build目錄下生成:libthrift-0.8.0.jar

3 eclipse中引入libthrift-0.8.0.jar  slf4j-log4j12-1.5.8.jar  slf4j-api-1.5.8.jar  log4j-1.2.14.jar

4 即可在Eclipse中開發Server 和 Client端代碼

   

Server端:


1 實現Hello.Iface接口

package com.cdv.hello;

import org.apache.thrift.TException;


import cdv.Hello.Iface;


public class HelloServerImpl implements Iface {

@Override
public String helloString(String para) throws TException {
// TODO Auto-generated method stub
System.out.println(para);
return para;
}

@Override
public int helloInt(int para) throws TException {
// TODO Auto-generated method stub
System.out.println(String.valueOf(para));
return 1;
}

@Override
public boolean helloBollean(boolean para) throws TException {
// TODO Auto-generated method stub
System.out.println(String.valueOf(para));
return false;
}

@Override
public void helloVoid() throws TException {
// TODO Auto-generated method stub
System.out.println("空值");
}


}


2 接受客戶端請求

package com.cdv.hello;

import org.apache.thrift.TProcessor;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;


import cdv.Hello;

public class ServerThread implements Runnable {

@Override
public void run() {
// TODO Auto-generated method stub
while( true ){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}

try { 
           // 設置服務端口爲 7911 
           TServerSocket serverTransport = new TServerSocket(7911); 
           // 關聯處理器與 Hello 服務的實現
           TProcessor processor = new Hello.Processor<HelloServerImpl>(new HelloServerImpl()); 
           
           TServer server = new TThreadPoolServer(new Args(serverTransport).processor(processor)); 
           System.out.println("Start server on port 7911..."); 
           server.serve(); 
       } catch (TTransportException e) { 
           e.printStackTrace(); 
       } 

}


}


}


3 創建服務端線程

package com.cdv.hello;


public class HelloServiceServer {


public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub

Thread _thread = new Thread(new ServerThread()) ;
_thread.start();

}

}


客戶端代碼:


package com.org;

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;


import cdv.Hello;


public class Client {

public static void main( String[] args ) { 
        try { 
            // 設置調用的服務地址爲本地,端口爲 7911 
            TTransport transport = new TSocket("localhost", 7911); 
            transport.open(); 
            // 設置傳輸協議爲 TBinaryProtocol 
            TProtocol protocol = new TBinaryProtocol(transport); 
            Hello.Client client = new Hello.Client(protocol); 
            // 調用服務的 helloVoid 方法
            client.helloVoid(); 
            System.out.println(client.helloInt(28)) ;
            System.out.println(client.helloBollean(true)) ;
            System.out.println(client.helloString("測試")) ;
            client.send_helloString("測試0101");
            transport.close(); 
            
        } catch (TTransportException e) { 
            e.printStackTrace(); 
        } catch (TException e) { 
            e.printStackTrace(); 
        } 
    } 

}



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