文件设置Thrift实例
時間緊張,先記一筆,后續優化與完善。
????要學習Thrift,它的官網上有資料分析以及實例,可以到官網:http://thrift.apache.org/上查看。
????在官網下載thrift的資源包,安裝編譯生成響應語言下的jar包,詳細在windows下或者ubuntu下的安裝參見:
????Thrift 學習筆記2——Windows環境下Thrift的安裝、編譯以及測試
????Thrift 學習筆記1——Ubuntu環境下Thrift的安裝、編譯以及測試
????我主要是利用java語言實現Thrift的實例。因為感覺安裝起來比擬麻煩,所以不想去安裝thrift,我直接應用別人已經編譯好的jar包,將這些jar包直接添加到我的Myeclipse工程下就能夠編寫Thrift的項目了。此外,thrift文件主動生成java代碼需要應用thrift-0.9.0.exe,以上文件可以到這里去下載:
????thrift-0.9.0.exe下載地址
????Java語言Thrift工程需要的jar包下載地址
????libthrift-0.9.0.jar
????下面通過幾個實例來說明Thrift的應用方法:
????1、我們將下載的thrift-0.9.0.exe放置在目錄D:\Thrift下
????2、編寫Hello.thrift文件
service Hello{string helloString(1:string para)i32 helloInt(1:i32 para)bool helloBoolean(1:bool para)void helloVoid()string helloNull() }????這是應用IDL描述性語言編寫的Thrift文件,包括了5個方法,每一個方法包括一個方法名,參數列表和返回類型。每一個參數包括參數序號,參數類型以及參數名。 Thrift 是對 IDL(Interface Definition Language) 描述性語言的一種詳細實現。
????3、主動生成java代碼
????將Hello.thrift文件和thrift-0.9.0.exe放置到相同目錄下,即D:\Thrift,運行cmd,打開窗口命令行,定位到D:\Thrift
????執行命令:
D:\Thrift>thrift-0.9.0.exe -gen java Hello.thrift????此時會在D:\Thrift下生成一個目錄gen-java,里面有Hello.java
????4、創建Java工程
????打開Eclipse或者Myeclipse,創建一個Java工程:Hello,導入剛才生成的Hello.java文件,同時新建一個自在文件夾,Thrift工程需要的jar包以及libthrift-0.9.0.jar放置到文件夾下,同時在Java Build Path中添加引用。
????5、編寫接口
import org.apache.thrift.TException; public class HelloServiceImpl implements Hello.Iface{public boolean helloBoolean(boolean para) throws TException{return para;}public int helloInt(int para) throws TException{try {Thread.sleep(20000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return para;}public String helloNull() throws TException{return null;}public String helloString(String para) throws TException{return para;}public void helloVoid() throws TException{System.out.println("Hello World!");}}????接口實現Thrift定義文件中的服務。
????6、編寫服務器端
每日一道理只有啟程,才會到達理想和目的地,只有拼搏,才會獲得輝煌的成功,只有播種,才會有收獲。只有追求,才會品味堂堂正正的人。
import org.apache.thrift.TProcessor; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TBinaryProtocol.Factory; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TSimpleServer; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.server.TThreadPoolServer.Args; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TServerTransport; import org.apache.thrift.transport.TTransportException;public class HelloServiceServer {/*** 啟動thrift服務器* @param args*/public static void main(String[] args) { try{//設置服務器端口為7911TServerSocket serverTransport = new TServerSocket(7911);//設置協議工廠為TBinaryProtocol.FactoryFactory proFactory = new TBinaryProtocol.Factory();//關聯處理器與Hello服務的實現TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());TServer.Args tArgs = new TServer.Args(serverTransport);tArgs.processor(processor);tArgs.protocolFactory(proFactory);//應用TSimpleServerTServer server = new TSimpleServer(tArgs);System.out.println("Start server on port 7911....");server.serve();}catch(TTransportException e){e.printStackTrace();} /*try{//設置服務器端口為7911TServerSocket serverTransport = new TServerSocket(7911);//設置協議工廠為TBinaryProtocol.FactoryFactory proFactory = new TBinaryProtocol.Factory();//關聯處理器與Hello服務的實現TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());Args tArgs = new Args(serverTransport);tArgs.processor(processor);tArgs.protocolFactory(proFactory);TServer server = new TThreadPoolServer(tArgs);System.out.println("Start server on port 7911....");server.serve();TServerTransport s = new TServerSocket(11); }catch(TTransportException e){e.printStackTrace();}*/}}
????7、編寫客戶端
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 HelloServiceClient {/*** 調用Hello服務* @param args*/public static void main(String[] args) { try {//設置調用的服務器為本地,端口為7911TTransport transport = new TSocket("localhost", 7911);transport.open();//設置傳輸協議為TBinaryProtocolTProtocol protocol = new TBinaryProtocol(transport);Hello.Client client = new Hello.Client(protocol);client.helloVoid();transport.close();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (TException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}????8、運行
????先運行服務器端,再運行客戶端。
????失掉:
Start server on port 7911.... Hello World!文章結束給大家分享下程序員的一些笑話語錄: 據說有一位軟件工程師,一位硬件工程師和一位項目經理同坐車參加研討會。不幸在從盤山公路下山時壞在半路上了。于是兩位工程師和一位經理就如何修車的問題展開了討論。
硬件工程師說:“我可以用隨身攜帶的瑞士軍刀把車壞的部分拆下來,找出原因,排除故障。”
項目經理說:“根據經營管理學,應該召開會議,根據問題現狀寫出需求報告,制訂計劃,編寫日程安排,逐步逼近,alpha測試,beta1測試和beta2測試解決問題。”
軟件工程說:“咱們還是應該把車推回山頂再開下來,看看問題是否重復發生?!?br />
轉載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/20/3089725.html
總結
以上是生活随笔為你收集整理的文件设置Thrift实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP 函数:intval()
- 下一篇: Hadoop学习笔记(一)从官网下载安装