标签:stack 类型 person 平台 put pad nbsp reply 允许
一、什么是thrift
Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由FaceBook为“大规模跨语言服务开发”而开发的。它通过一个代码生成引擎联合了一个软件栈,来创建不同程度的、无缝的跨平台高效服。后来捐献给apache组织了。
二、thrift的架构
三、thrift的使用
1.下载并安装thrift.exe,然后配置环境变量,使用thrift -version 来验证是否安装成功
2.编写.thrift文件
//名称空间,用来隔离代码,防止数据类型定义中名字冲突 namespace java netty_thrift //引入其他thrift文件 //include "test.thrift" /** 数据类型定义,通过typedef将thrift中的类型和java中的类型对应起来,然后直接使用java中的数据类型,方便理解 下面就是thrift中使用的基本数据类型 */ typedef i16 short typedef i32 int typedef i64 long typedef bool boolean typedef string String typedef double double //定义常量 //const int CONSTANT_A = 12345 /** 定义结构 1.每个属性都有唯一一个正整数标识符 2.每个属性都可以标记为optional和required 3.每个结构体都可以包含其他结构体 4.每个属性都有默认值 5. */ struct Person{ 1: optional String username 2: optional int age 3: optional boolean married } //异常定义 exception DataException{ 1: optional String message 2: optional String callStack 3: optional String date } //服务定义 service PersonService{ Person getPersonByName(1: required String username) throws (1: DataException dataException), void savePerson(1: required Person person) }
enum TweetType {//仅仅是作为一个例子,后面生成代码时没有用到
TWEET, // 编译器默认从1开始赋值
RETWEET = 2, // 可以赋予某个常量某个整数
DM = 0xa, //允许常量是十六进制整数
REPLY // 末尾没有逗号
}
3.生成java代码
使用命令行thrift -gen java D:\WorkSpace1\netty\src\netty_thrift\data.thrift 生成的文件在执行命令时所在的目录。
4.编写服务端和客户端的代码
public class Server { public static void main(String[] args) throws TTransportException { TNonblockingServerSocket socket = new TNonblockingServerSocket(9999); org.apache.thrift.server.THsHaServer.Args args3 = new THsHaServer.Args(socket); Processor<PersonServiceImpl> processor = new PersonService.Processor<>(new PersonServiceImpl()); args3.protocolFactory(new TCompactProtocol.Factory()); args3.transportFactory(new TFramedTransport.Factory()); args3.processorFactory(new TProcessorFactory(processor)); THsHaServer server = new THsHaServer(args3); server.serve(); } }
public class PersonServiceImpl implements PersonService.Iface { @Override public Person getPersonByName(String username) throws DataException, TException { Person p = new Person(); p.setUsername(username); p.setAge(28); p.setMarried(false); return p; } @Override public void savePerson(Person person) throws TException { System.out.println(person); } }
public class Client { public static void main(String[] args) throws DataException, TException { TFramedTransport tFramedTransport = new TFramedTransport(new TSocket("localhost",9999)); TProtocol protocol = new TCompactProtocol(tFramedTransport); netty_thrift.PersonService.Client client = new PersonService.Client(protocol); tFramedTransport.open(); Person person = client.getPersonByName("kyle"); System.out.println(person); Person p = new Person(); p.setUsername("xiaoming"); p.setAge(24); p.setMarried(false); client.savePerson(p); } }
标签:stack 类型 person 平台 put pad nbsp reply 允许
原文地址:https://www.cnblogs.com/kyleinjava/p/10419068.html