netty学习八:在window上安装thrift以及第一个小demo
来源:互联网 发布:node安装教程 编辑:程序博客网 时间:2024/05/21 07:55
下载thrift window编译器
需要先下载编译器,本文用的版本是:
thrift-0.10.0.exe
对应的下载链接:thrift编译器
将下载好后的thrift-0.10.0.exe重命名成thrift.exe,并配置到window path路径上,假设thrift.exe是放置在如下目录:
D:\test\software\lib\thrift
那么直接将D:\test\software\lib\thrift配置到path上。
使用cmd命令打开一个窗口,执行:
thrift -version
正常情况下会输出thrift的版本号:
Thrift version 0.10.0
下载thrift java依赖包
<dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.10.0</version></dependency>
使用maven命令下载即可,下载成功后会有四个依赖包:
libthrift-0.10.0.jarslf4j-api-1.7.12.jarhttpclient-4.4.1.jarhttpcore-4.4.1.jar
下载thrift eclipse 插件
直接使用Eclipse的MarketPlace找不到thrift support这个插件,得使用Eclipse的Install new software的方式。
点击Eclipse的install new software按钮,输入地址
http://thrift4eclipse.sourceforge.net/updatesite/
下载thrift support 插件,这个插件的高亮功能还是相当完备的,建议开发者安装。
编写thrift idl文件
编写animal.thrift
namespace java thrift.generatedtypedef i16 shorttypedef i32 inttypedef i64 longtypedef bool booleantypedef string Stringstruct Animal { 1: optional String username, 2: optional int age, 3: optional boolean married}exception DataException { 1: optional String message, 2: optional String callStack, 3: optional boolean date}service AnimalService { Animal getAnimalByUsername(1: required String name) throws (1: DataException dataException), void saveAnimal(1: required Animal animal) throws (1: DataException dataException)}
animal.thrift位于:
src/main/java/thrift
完整路径是:
src/main/java/thrift/animal.thrift
其中的
typedef i16 shorttypedef i32 inttypedef i64 longtypedef bool booleantypedef string String
是做类型定义,因为thrift默认的类型定义不太符合java程序员的使用习惯.
使用thrift编译器生成java类
执行命令:
thrift –gen java src/main/java/thrift/animal.thrift
注意是gen前面是两个-,不是一个- .
执行成功后会生成gen-java目录:
gen-java thrift generated Animal.java AnimalService.java DataException.java
这些文件不是在java source目录下的,我们可以将其拷贝到source目录下,本文中将其拷贝到如下source目录:
thrift.generated
实现Animal业务层服务类
package thrift.firstdemo;import org.apache.thrift.TException;import thrift.generated.Animal;import thrift.generated.AnimalService;import thrift.generated.DataException;/** * 业务层服务类 * */public class AnimalBizService implements AnimalService.Iface{ @Override public Animal getAnimalByUsername(String name) throws DataException, TException { System.out.println("client name:"+name); Animal animal = new Animal(); animal.setUsername(name); animal.setAge(34); animal.setMarried(true); return animal; } @Override public void saveAnimal(Animal animal) throws DataException, TException { System.out.println("saveAnimal"); System.out.println(animal.getUsername()); System.out.println(animal.getAge()); System.out.println(animal.isMarried()); }}
通常用thrift生成service后,会用一个业务实现类来实现thrift servce接口,完成业务逻辑.
Thrift Server端代码
package thrift.firstdemo;import org.apache.thrift.TProcessorFactory;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.server.THsHaServer;import org.apache.thrift.server.THsHaServer.Args;import org.apache.thrift.server.TServer;import org.apache.thrift.transport.TFramedTransport;import org.apache.thrift.transport.TNonblockingServerSocket;import org.apache.thrift.transport.TTransportException;import thrift.generated.AnimalService;public class ThriftServer { public static void main(String[] args) throws TTransportException { TNonblockingServerSocket socket = new TNonblockingServerSocket(8899); Args arg = new THsHaServer.Args(socket).minWorkerThreads(2).maxWorkerThreads(4); AnimalService.Processor<AnimalBizService> processors = new AnimalService.Processor<>(new AnimalBizService()); arg.protocolFactory(new TCompactProtocol.Factory()); arg.transportFactory(new TFramedTransport.Factory()); arg.processorFactory(new TProcessorFactory(processors)); TServer server = new THsHaServer(arg); server.serve(); }}
Thrift Client端代码
package thrift.firstdemo;import org.apache.thrift.TException;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.transport.TFramedTransport;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;import thrift.generated.Animal;import thrift.generated.AnimalService;import thrift.generated.AnimalService.Client;import thrift.generated.DataException;public class ThriftClient { public static void main(String[] args) throws DataException, TException { TTransport transport = new TFramedTransport(new TSocket("localhost", 8899),600); TCompactProtocol tCompactProtocol = new TCompactProtocol(transport); Client client = new AnimalService.Client(tCompactProtocol); transport.open(); Animal animal = client.getAnimalByUsername("sam"); System.out.println(animal.getUsername()); System.out.println(animal.getAge()); System.out.println(animal.isMarried()); Animal animal2 = new Animal(); animal2.setUsername("sam2"); animal2.setAge(35); animal2.setMarried(false); client.saveAnimal(animal2); }}
运行代码
分别运行ThriftServer类和ThriftClient类的main方法,启动服务端和客户端,正常情况下会打印如下日志:
client name:sam
saveAnimal
sam2
35
false
csdn code 路径
这个项目的源代码放置在csdn code上,欢迎访问。
netty_study
- netty学习八:在window上安装thrift以及第一个小demo
- netty学习十:google grpc框架环境搭建以及第一个demo
- python学习--安装以及第一个程序
- opencv2的安装、在VS上的配置以及第一个示例
- Angular2学习环境安装及第一个小项目
- Flex SDK安装配置及第一个Demo
- Rails 安装及第一个Demo的生成
- Spring 学习理解及第一个demo
- Android NDK 环境搭建以及第一个Demo
- Android NDK入门2015(环境搭建及第一个小demo)
- eclipse 下配置hibernate以及第一个hibernate小程序
- eclipse 下配置hibernate以及第一个hibernate小程序
- thrift学习笔记(一) thrift简介及第一个helloword程序
- thrift学习笔记(一) thrift简介及第一个helloword程序
- opencv 在windows下的编译以及第一个程序
- anjuta的安装、配置以及第一个hello程序
- Python reportlab教程(1)-安装以及第一个示例
- hadoop-0.23.9安装以及第一个mapreduce测试程序
- Java 并发工具包 java.util.concurrent 用户指南
- MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)
- 自己动手写操作系统:0.环境搭建
- 图论基础算法
- 练习 1
- netty学习八:在window上安装thrift以及第一个小demo
- 迷之阶梯
- Unity手游制作记-制作通用对象管理器(二)
- AtCoder Regular 80
- 黑白子交换
- AIDL的基本使用(一)
- Linux系统的"护花使者"-----守护进程
- View事件的传递
- css3元素向上移动