摘要:簡介是什么是一個軟件框架,用來進(jìn)行可擴(kuò)展且跨語言的服務(wù)的開發(fā)。的功能允許定義一個簡單的定義文件中的數(shù)據(jù)類型和服務(wù)接口,以作為輸入文件,編譯器生成代碼用來方便地生成客戶端和服務(wù)器通信的無縫跨編程語言。
Thrift 簡介 Thrift 是什么
Thrift是一個軟件框架,用來進(jìn)行可擴(kuò)展且跨語言的服務(wù)的開發(fā)。它結(jié)合了功能強(qiáng)大的軟件堆棧和代碼生成引擎,以構(gòu)建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 這些編程語言間無縫結(jié)合的、高效的服務(wù)。
Thrift 的功能Thrift允許定義一個簡單的定義文件中的數(shù)據(jù)類型和服務(wù)接口,以作為輸入文件,編譯器生成代碼用來方便地生成RPC客戶端和服務(wù)器通信的無縫跨編程語言。
環(huán)境安裝基于MAC環(huán)境,打開終端,執(zhí)行如下命令:
brew install thrift
查看是否安裝成功:
thrift -version使用示例 Maven 依賴
在服務(wù)端和客戶端的 pom.xml 中添加 Thrift 依賴(版本和安裝時保持一致):
編寫服務(wù)端 Thrift 文件org.apache.thrift libthrift 0.11.0
hello.thrift
namespace java com.hans.thriftserver service Hello{ string helloString(1:string param) }使用 Thrift 工具生成 java 代碼
thrift -r -gen java hello.thrift
修改 namespace java com.hans.thriftclient 后再次執(zhí)行則生成客戶端 java 代碼
將代碼放到對應(yīng)目錄即 com.hans.thriftserver 子目錄 thrift 下
編寫服務(wù)實(shí)現(xiàn)類package com.hans.thriftserver.thrift.impl; import com.hans.thriftserver.thrift.Hello; import org.apache.thrift.TException; public class HelloServiceImpl implements Hello.Iface { @Override public String helloString(String param) throws TException { return "hello: " + param; } }編寫服務(wù)端
package com.hans.thriftserver; import com.hans.thriftserver.thrift.Hello; import com.hans.thriftserver.thrift.impl.HelloServiceImpl; import org.apache.thrift.TProcessor; import org.apache.thrift.protocol.TBinaryProtocol; 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 org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author huangxun */ @SpringBootApplication public class ThriftServerApplication { public static void main(String[] args) { SpringApplication.run(ThriftServerApplication.class, args); try { System.out.println("服務(wù)端開啟...."); TProcessor tprocessor = new Hello.Processor編寫客戶端(new HelloServiceImpl()); // 簡單的單線程服務(wù)模型 TServerSocket serverTransport = new TServerSocket(9898); TServer.Args tArgs = new TServer.Args(serverTransport); tArgs.processor(tprocessor); tArgs.protocolFactory(new TBinaryProtocol.Factory()); TServer server = new TSimpleServer(tArgs); server.serve(); } catch (TTransportException e) { e.printStackTrace(); } } }
package com.hans.thriftclient; import com.hans.thriftclient.thrift.Hello; 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 org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author huangxun */ @SpringBootApplication public class ThriftClientApplication { public static void main(String[] args) { SpringApplication.run(ThriftClientApplication.class, args); System.out.println("客戶端啟動...."); TTransport transport = null; try { transport = new TSocket("localhost", 9898, 30000); // 協(xié)議要和服務(wù)端一致 TProtocol protocol = new TBinaryProtocol(transport); Hello.Client client = new Hello.Client(protocol); transport.open(); String result = client.helloString("hans"); System.out.println(result); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { e.printStackTrace(); } finally { if (null != transport) { transport.close(); } } } }啟動服務(wù)端
后臺打印輸出:
服務(wù)端開啟....執(zhí)行客戶端
后臺打印輸出:
客戶端啟動.... hello: hansGithub 完整代碼
https://github.com/hxun123/sp...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69491.html
摘要:概述之前講過容器的可視化監(jiān)控,即監(jiān)控容器的運(yùn)行情況,包括使用率內(nèi)存占用網(wǎng)絡(luò)狀況以及磁盤空間等等一系列信息。實(shí)戰(zhàn)一下中添加依賴啟動應(yīng)用程序之后,只要在瀏覽器中輸入端點(diǎn)信息就能獲得應(yīng)用的一些狀態(tài)信息。 showImg(https://segmentfault.com/img/remote/1460000014684947); 概述 之前講過Docker容器的可視化監(jiān)控,即監(jiān)控容器的運(yùn)行情...
摘要:微服務(wù)的基本思想在于考慮圍繞著業(yè)務(wù)領(lǐng)域組件來創(chuàng)建應(yīng)用,這些應(yīng)用可獨(dú)立地進(jìn)行開發(fā)管理和加速。在分散的組件中使用微服務(wù)云架構(gòu)和平臺,使部署管理和服務(wù)功能交付變得更加簡單。 showImg(https://segmentfault.com/img/remote/1460000014332184); 概述 當(dāng)下web服務(wù)端開發(fā)中最火的名詞中絕對有微服務(wù)的一席之地,其也成為當(dāng)下互聯(lián)網(wǎng)后端服務(wù)架...
摘要:在文章微服務(wù)調(diào)用鏈追蹤中心搭建一文中模擬出來的調(diào)用鏈就是一個遠(yuǎn)程調(diào)用的例子,只不過這篇文章里是通過這種同步調(diào)用方式,利用的是協(xié)議在應(yīng)用層完成的,這種方法雖然奏效,但有時效率并不高。 showImg(https://segmentfault.com/img/remote/1460000014858219); 一、概述 RPC(Remote Procedure Call)即 遠(yuǎn)程過程調(diào)...
摘要:在文章微服務(wù)調(diào)用鏈追蹤中心搭建一文中模擬出來的調(diào)用鏈就是一個遠(yuǎn)程調(diào)用的例子,只不過這篇文章里是通過這種同步調(diào)用方式,利用的是協(xié)議在應(yīng)用層完成的,這種方法雖然奏效,但有時效率并不高。 showImg(https://segmentfault.com/img/remote/1460000014858219); 一、概述 RPC(Remote Procedure Call)即 遠(yuǎn)程過程調(diào)...
摘要:概述在我之前的應(yīng)用監(jiān)控實(shí)戰(zhàn)一文中,講述了如何利用版本來可視化地監(jiān)控應(yīng)用。接下來我們就來創(chuàng)建一個待監(jiān)控的示例。 showImg(https://segmentfault.com/img/remote/1460000015671446); 概述 在我之前的 《Spring Boot應(yīng)用監(jiān)控實(shí)戰(zhàn)》 一文中,講述了如何利用 Spring Boot Admin 1.5.X 版本來可視化地監(jiān)控 ...
閱讀 1882·2021-11-11 16:55
閱讀 2064·2021-10-08 10:13
閱讀 739·2019-08-30 11:01
閱讀 2155·2019-08-29 13:19
閱讀 3277·2019-08-28 18:18
閱讀 2620·2019-08-26 13:26
閱讀 579·2019-08-26 11:40
閱讀 1864·2019-08-23 17:17