Apache Thrift入门(安装、测试与java程序编写)
安装Apache Thrift
ubuntu linux运行:
- #!/bin/bash
- #下载
- wget http://mirrors.cnnic.cn/apache/thrift/0.9.1/thrift-0.9.1.tar.gz
- tar zxvf thrift-0.9.1.tar.gz
- cd thrift-0.9.1.tar.gz
- ./configure
- make
- make install
- #编译java依赖包
- cd lib/java
- ant
安装ubuntu依赖
sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev
编写thrift文件hello.thrift
- namespace java com.micmiu.thrift.demo
- service HelloWorldService {
- string sayHello(1:string username)
- }
运行
thrift -gen java hello.thrift
将在同级目录下生成gen-java/com/micmiu/thrift/demo/HelloWorldService.java文件
编写测试程序
使用maven构建
pom.xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.micmiu.thrift.demo</groupId>
- <artifactId>thrift-test</artifactId>
- <version>0.1.0-SNAPSHOT</version>
- <dependencies>
- <strong> <dependency>
- <groupId>org.apache.thrift</groupId>
- <artifactId>libthrift</artifactId>
- <version>0.9.1</version>
- </dependency></strong>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.5.8</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.2-beta-5</version>
- <configuration>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.2</version>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- <encoding>UTF-8</encoding>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
以下代码来自:http://www.micmiu.com/soa/rpc/thrift-sample/
HelloClientDemo.java
- package com.micmiu.thrift.demo;
- import org.apache.thrift.TException;
- import org.apache.thrift.protocol.TBinaryProtocol;
- import org.apache.thrift.protocol.TCompactProtocol;
- import org.apache.thrift.protocol.TJSONProtocol;
- import org.apache.thrift.protocol.TProtocol;
- import org.apache.thrift.transport.TSocket;
- import org.apache.thrift.transport.TTransport;
- import org.apache.thrift.transport.TTransportException;
- /**
- * blog http://www.micmiu.com
- *
- * @author Michael
- *
- */
- public class HelloClientDemo {
- public static final String SERVER_IP = "localhost";
- public static final int SERVER_PORT = 8090;
- public static final int TIMEOUT = 30000;
- /**
- *
- * @param userName
- */
- public void startClient(String userName) {
- TTransport transport = null;
- try {
- transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
- // 协议要和服务端一致
- TProtocol protocol = new TBinaryProtocol(transport);
- // TProtocol protocol = new TCompactProtocol(transport);
- // TProtocol protocol = new TJSONProtocol(transport);
- HelloWorldService.Client client = new HelloWorldService.Client(
- protocol);
- transport.open();
- String result = client.sayHello(userName);
- System.out.println("Thrify client result =: " + result);
- } catch (TTransportException e) {
- e.printStackTrace();
- } catch (TException e) {
- e.printStackTrace();
- } finally {
- if (null != transport) {
- transport.close();
- }
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- HelloClientDemo client = new HelloClientDemo();
- client.startClient("Michael");
- }
- }
HelloServerDemo.java
- package com.micmiu.thrift.demo;
- import org.apache.thrift.TProcessor;
- import org.apache.thrift.protocol.TBinaryProtocol;
- import org.apache.thrift.protocol.TCompactProtocol;
- import org.apache.thrift.protocol.TJSONProtocol;
- import org.apache.thrift.protocol.TSimpleJSONProtocol;
- import org.apache.thrift.server.TServer;
- import org.apache.thrift.server.TSimpleServer;
- import org.apache.thrift.transport.TServerSocket;
- /**
- * blog http://www.micmiu.com
- *
- * @author Michael
- *
- */
- public class HelloServerDemo {
- public static final int SERVER_PORT = 8090;
- public void startServer() {
- try {
- System.out.println("HelloWorld TSimpleServer start ....");
- TProcessor tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(
- new HelloWorldImpl());
- // HelloWorldService.Processor<HelloWorldService.Iface> tprocessor =
- // new HelloWorldService.Processor<HelloWorldService.Iface>(
- // new HelloWorldImpl());
- // 简单的单线程服务模型,一般用于测试
- TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
- TServer.Args tArgs = new TServer.Args(serverTransport);
- tArgs.processor(tprocessor);
- tArgs.protocolFactory(new TBinaryProtocol.Factory());
- // tArgs.protocolFactory(new TCompactProtocol.Factory());
- // tArgs.protocolFactory(new TJSONProtocol.Factory());
- TServer server = new TSimpleServer(tArgs);
- server.serve();
- } catch (Exception e) {
- System.out.println("Server start error!!!");
- e.printStackTrace();
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- HelloServerDemo server = new HelloServerDemo();
- server.startServer();
- }
- }
maven工程的src/main/java/com/micmiu/thrift/demo文件夹下有4个文件:
HelloClientDemo.java
HelloServerDemo.java
HelloWorldImpl.java
HelloWorldService.java
其中HelloWorldService.java文件是用上文的thrift命令生成的。
执行测试程序
使用maven编译
mvn package assembly:assembly
运行
在target目录下,运行时需要指定main class
java -cp thrift-test-0.1.0-SNAPSHOT-jar-with-dependencies.jar com.micmiu.thrift.demo.HelloServerDemo
java -cp thrift-test-0.1.0-SNAPSHOT-jar-with-dependencies.jar com.micmiu.thrift.demo.HelloClientDemo
Apache Thrift入门(安装、测试与java程序编写)的更多相关文章
- apache thrift 入门(一)
1.简介 Apache Thrift软件框架,是用来开发可扩展的跨语言的软件服务.通过软件堆栈和代码生成引擎相结合的方式来构建服务,使C++, Java, Python, PHP, Ruby, Erl ...
- JAVA程序编写入门
在任意文件夹下创建一个文本,然后重命名,把文本后缀名改为.java.然后用eclipse打开此文件编写程序内容. public class nihao{ public static void main ...
- centos下apache thrift的安装
参考:http://running.iteye.com/blog/1983463 thrift-0.9.0安装 最好切换到root用户操作,避免不必要的麻烦. 进行例子程序tutorial目录下,通 ...
- Lucene入门-安装和运行Demo程序
Lucene版本:7.1 一.下载安装包 https://lucene.apache.org/core/downloads.html 二.安装 把4个必备jar包和路径添加到CLASSPATH \lu ...
- apache ab工具安装测试
1.安装 安装包下载地址: 将 httpd-2.2.29.tar.gz 解压到目录 /apps/install/httpd-2.2.29 ,这是我放置的位置 cd /apps/install/http ...
- Docker入门-构建第一个Java程序
定制镜像 准备一个没有第三方依赖的java web项目,可能参考示例maven结构项目: session-web.war 把该war上传到安装有docker软件的服务器上宿主目录下.在同级目录创建Do ...
- java 程序编写规则(自己总结)
1.命名规范 (1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z).数字(0-9)和下划线"_". (2)类名是一个名词,采用大小写混合的方式,每个单词的首字母大写.例如:Us ...
- java程序编写需注意的问题
初学java,免不了很多注意事项 加分号 类名与文件名一致 javac fileName而非javac fileName.class ```java System.out.println(" ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_21-页面静态化-静态化测试-静态化程序编写
public String getPageHtml(String pageId){ /** * 静态化程序获取页面的DataUrl * * 静态化程序远程请求DataUrl获取数据模型 * * 静态化 ...
随机推荐
- FP-Growth算法之频繁项集的挖掘(python)
前言: 关于 FP-Growth 算法介绍请见:FP-Growth算法的介绍. 本文主要介绍从 FP-tree 中提取频繁项集的算法.关于伪代码请查看上面的文章. FP-tree 的构造请见:FP-G ...
- Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/7932268 在前面一篇文章中,我们分析了And ...
- 从一段代码看fork()函数及其引发的竞争
首先来看一段从<UNIX环境高级编程>中摘录的一段很有意思的代码.借此我们再来谈谈fork()函数的一些问题. #include "apue.h" static voi ...
- 一起talk GDB吧(第七回:GDB监视功能)
各位看官们.大家好.上一回中我们说的是GDB改动程序执行环境的功能.而且说了怎样使用GDB改动变量 的值.这一回中.我们继续介绍GDB的调试功能:监视功能.当然了,我们也会介绍怎样使用GDB的监视功 ...
- android——字体颜色跟随状态改变
TextView的字体颜色也可以和ImageView的background一样,跟随状态发生改变.只需要自定义一下字体颜色.在color文件夹下面,新建一个颜色文件的xml. OK ,这就完成 了. ...
- jqGrid插件的重载表格的解决方案
jqGrid插件的重载表格的解决方案 $("#table_list_1").empty();// 清空表格内容 var parent=$("#gbox_table_lis ...
- React-Native个人信息界面
最近在做一个小练习项目,用户登陆后需要跳转到用户登录信息界面,加班半个小时终于将界面的布局搞定.接触Rect-Native也有一段时间了,以前没有做过ios,只做过android,就布局和开发效率上来 ...
- NSArray 数组操作
/*---------------------------创建数组------------------------------*/ //NSArray *array = [[NSArray alloc ...
- USACO 1.4 ariprog 解题报告
这是继虫洞之后又让我为难的一个 剪枝题目,无论如何,做的再快,也只能过6个点,最后三个点也TLE.后来参考了一下标答,大概思路是这样的. 朴素算法就不多说了,枚举a,b然后判断就行,网上说这样优化到位 ...
- ORA-01034/ORA-27101解决
sql> shutdown immediate 后就无法进行任何操作了,重新通过sqlplus不能登录,提示ORA-01034和ORA-27101错误 解决,以下全部在cmd中: 1. 启动or ...