轉載自 CSDN Arjick
Thrift是一個可伸縮的跨語言的服務開發框架,是facebook開發的一個跨語言通信平臺。爲各種語言提供快捷的rpc服務。現階段已經支持C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml等語言。在近來的工作中,重新學習Thrift通信的內容,和大家做個簡單的交流。
Thrift示意圖
1)安裝Thrift環境
Thrift的環境的安裝並不複雜,我們現在以最簡單的windows環境做個案例。
首先在官方網站下載最新的thrift exe文件,http://thrift.apache.org/download/
然後把exe文件改名爲thrift.exe,放在了windows的目錄下,如圖所示:
接着配置thrift環境變量:
測試Thrift運行環境:
2)編寫Thrift文件
thrift文件如下
- namespace java thrift // defines the namespace
- typedef i32 int //typedefs to get convenient names for your types
- service ThriftService {
- int add(1:int a,2:int b),
- }
通過命令行執行Thrift文件,並生成
3)建立Thrift工程
首先建立maven工程,把如下內容加到pom.xml
- <dependency>
- <groupId>org.apache.thrift</groupId>
- <artifactId>libthrift</artifactId>
- <version>0.9.0</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.5</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- <version>1.7.5</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.7.5</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.17</version>
- </dependency>
代碼如下:
- package thrift;
- import org.apache.thrift.TException;
- public class ThriftServiceImpl implements Iface {
- @Override
- public int add(int a, int b) throws TException {
- return a + b;
- }
- }
4)編寫服務器及測試
- package com.duowan.yy.thriftTest;
- 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.transport.TServerSocket;
- import org.apache.thrift.transport.TTransportException;
- import thrift.ThriftService;
- import thrift.ThriftServiceImpl;
- public class ThriftServer {
- public static void main(String[] args) {
- try {
- TServerSocket serverTransport = new TServerSocket(7911);
- Factory proFactory = new TBinaryProtocol.Factory();
- TProcessor processor = new ThriftService.Processor<ThriftService.Iface>(
- new ThriftServiceImpl());
- TServer.Args tArgs = new TServer.Args(serverTransport);
- tArgs.processor(processor);
- tArgs.protocolFactory(proFactory);
- TServer server = new TSimpleServer(tArgs);
- System.out.println("Start server on port 7911....");
- server.serve();
- } catch (TTransportException e) {
- e.printStackTrace();
- }
- }
- }
測試啓動:
編寫測試類:
- package com.duowan.yy.thriftTest;
- 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 thrift.ThriftService;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- try {
- TTransport transport = new TSocket("localhost", 7911);
- transport.open();
- TProtocol protocol = new TBinaryProtocol(transport);
- ThriftService.Client client = new ThriftService.Client(protocol);
- System.out.println(client.add(77, 5));
- transport.close();
- } catch (TTransportException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (TException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
效果如下:
簡單的Thrift之旅已經完成了,希望大家玩的開心。