1. 程式人生 > >thrift遠端呼叫示例

thrift遠端呼叫示例

說明

thrift是apache hadoop的一個子專案,主要是完成跨語言,跨平臺的序列化和遠端呼叫。具體的可以參考官方文件:

thrift.apache.org

安裝

thrift和上次介紹的protobuf一樣也需要安裝對應的編譯器,具體的安裝這裡不介紹了,可以參考:

http://thrift.apache.org/docs/install/

示例

這裡的例子,也是官方例子的簡化版,為了演示最基本的應用方式。弄明白實施要更深入研究的東西。

定義描述

thrift的示例工程和上次介紹的protobuf一樣,也可以直接在上面的工程中開發。

建立一個Calculator.thrift介面描述檔案。

namespace java com.wu.thrift

service Calculator {

   void ping(),

   i32 add(1:i32 num1, 2:i32 num2)
   }

編譯生成stub

進入專案的src/main/java目錄,編譯
thrift --gen java com/wu/thrift/Calculator.thrift
重新整理eclipse目錄,就能看到生成的檔案。

新增依賴

pom檔案中新增如下依賴
<dependency>
	<groupId>org.apache.thrift</groupId>
	<artifactId>libthrift</artifactId>
	<version>0.9.2</version>
</dependency>

編寫程式碼

編寫測試程式碼,分為客戶端、伺服器端
package com.wu.thrift;

import org.apache.thrift.TException;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TServer.Args;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;

public class Server2 {

	public static class CalculatorHandler implements Calculator.Iface{
		@Override
		public void ping() throws TException {
			System.out.println("ping......");
		}
		@Override
		public int add(int num1, int num2) throws TException {
			return num1+num2;
		}
	}
	
	
	public static void main(String[] args) throws TTransportException {
		//構建處理器
		CalculatorHandler handler=new CalculatorHandler();
		Calculator.Processor processor=new Calculator.Processor(handler);
		//構建伺服器
		TServerTransport serverTransport = new TServerSocket(9090);
		TServer server=new TSimpleServer(new Args(serverTransport).processor(processor));

		System.out.println("Starting the simple server...");
	     server.serve();
	}
}
客戶端
package com.wu.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;

public class Client2 {

	public static void main(String[] args) throws TException {
		TTransport transport=new TSocket("localhost",9090);
		transport.open();
		TProtocol protocol = new  TBinaryProtocol(transport);
		Calculator.Client client = new Calculator.Client(protocol);
		
		client.ping();
		int result=client.add(3, 2);
		System.out.println("計算結果:"+result);
		
		transport.close();
	}
}

執行

首先啟動伺服器端,然後啟動客戶端訪問,就能看到遠端呼叫效果了