server如何调用 thrift_Thrift入门很简单
Thrift是什么?
是Facebook開源的跨語言RPC框架。
實戰
這里實現一個簡單的服務CalculatorService。引入maven依賴
org.apache.thrift
libthrift
0.9.2
編寫Thrift接口定義文件
Thrift接口定義(IDL)文件采用抽象注解的方式說明類型信息,用于告知thrift代碼生成器如何生成相應語言的接口或者方法聲明。
namespace java com.vonzhou.learn.rpc
service CalculatorService {
/*** A method definition looks like C code. It has a return type, arguments,* and optionally a list of exceptions that it may throw. Note that argument* lists and exception lists are specified using the exact same syntax as* field lists in struct or exception definitions.*/
void ping(),
i32 add(1:i32 num1, 2:i32 num2),
}使用Thrift compiler根據IDL文件生成對應的源文件
這里僅僅配置了Java命名空間,運行上述命令后會生成CalculatorService.java文件。實現服務接口CalculatorService.Iface
public class CalculatorServiceHandler implements CalculatorService.Iface{
public void ping() throws TException {
System.out.println("ping");
}
public int add(int num1, int num2) throws TException {
return num1 + num2;
}
}實現Thrift Server
public class ThriftServer {
public static void start(CalculatorService.Processor processor) {
try {
/*** 服務器端傳輸層初始化*/
TServerTransport serverTransport = new TServerSocket(9090);
/*** Thrift Server 這里采用簡單單線程實現, 用于測試環境*/
TServer server = new TSimpleServer(new TServer.Args(serverTransport).processor(processor));
System.out.println("Starting the simple thrift server...");
/*** 啟動服務*/
server.serve();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
start(new CalculatorService.Processor(new CalculatorServiceHandler()));
}
}實現Thrift Client
public class ThriftClient {
public static void main(String[] args) {
try {
TTransport transport = new TSocket("localhost", 9090);
/*** Opens the transport for reading/writing.*/
transport.open();
/*** 指定具體的 protocol*/
TProtocol protocol = new TBinaryProtocol(transport);
/*** TServiceClient :通過 protocol 和 transport 與具體的服務通信,理解為 Stub*/
CalculatorService.Client client = new CalculatorService.Client(protocol);
/*** RPC call*/
System.out.println(client.add(100, 200));
transport.close();
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException x) {
x.printStackTrace();
}
}
}
理解
TTransport:IO層的封裝抽象,打開關閉,讀寫傳輸層,TTransport具體對應有不同的實現:
TServerTransport:服務器端IO層抽象,用于listen, accept連接請求。
TSocket:是TTransport基于socket的實現,同樣的,TServerSocket是TServerTransport 基于socket的實現, 是Thrift中對ServerSocket的包裝。
TProtocol:表示RPC通信的消息傳輸格式,實現有二進制(TBinaryProtocol),JSON(TJSONProtocol)格式等。
參考
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的server如何调用 thrift_Thrift入门很简单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery实现截取pc图片_jquer
- 下一篇: arp 不同网段 相同vlan_ARP工