安装Apache Thrift

ubuntu linux运行:

  1. #!/bin/bash
  2. #下载
  3. wget http://mirrors.cnnic.cn/apache/thrift/0.9.1/thrift-0.9.1.tar.gz
  4. tar zxvf thrift-0.9.1.tar.gz
  5. cd thrift-0.9.1.tar.gz
  6. ./configure
  7. make
  8. make install
  9. #编译java依赖包
  10. cd lib/java
  11. 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

  1. namespace java com.micmiu.thrift.demo
  2. service  HelloWorldService {
  3. string sayHello(1:string username)
  4. }

运行

thrift -gen java hello.thrift

将在同级目录下生成gen-java/com/micmiu/thrift/demo/HelloWorldService.java文件

编写测试程序

使用maven构建

pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.micmiu.thrift.demo</groupId>
  5. <artifactId>thrift-test</artifactId>
  6. <version>0.1.0-SNAPSHOT</version>
  7. <dependencies>
  8. <strong>    <dependency>
  9. <groupId>org.apache.thrift</groupId>
  10. <artifactId>libthrift</artifactId>
  11. <version>0.9.1</version>
  12. </dependency></strong>
  13. <dependency>
  14. <groupId>org.slf4j</groupId>
  15. <artifactId>slf4j-log4j12</artifactId>
  16. <version>1.5.8</version>
  17. </dependency>
  18. </dependencies>
  19. <build>
  20. <plugins>
  21. <plugin>
  22. <artifactId>maven-assembly-plugin</artifactId>
  23. <version>2.2-beta-5</version>
  24. <configuration>
  25. <descriptorRefs>
  26. <descriptorRef>jar-with-dependencies</descriptorRef>
  27. </descriptorRefs>
  28. </configuration>
  29. </plugin>
  30. <plugin>
  31. <groupId>org.apache.maven.plugins</groupId>
  32. <artifactId>maven-compiler-plugin</artifactId>
  33. <version>2.3.2</version>
  34. <configuration>
  35. <source>1.6</source>
  36. <target>1.6</target>
  37. <encoding>UTF-8</encoding>
  38. </configuration>
  39. </plugin>
  40. </plugins>
  41. </build>
  42. </project>

以下代码来自:http://www.micmiu.com/soa/rpc/thrift-sample/

HelloClientDemo.java

  1. package com.micmiu.thrift.demo;
  2. import org.apache.thrift.TException;
  3. import org.apache.thrift.protocol.TBinaryProtocol;
  4. import org.apache.thrift.protocol.TCompactProtocol;
  5. import org.apache.thrift.protocol.TJSONProtocol;
  6. import org.apache.thrift.protocol.TProtocol;
  7. import org.apache.thrift.transport.TSocket;
  8. import org.apache.thrift.transport.TTransport;
  9. import org.apache.thrift.transport.TTransportException;
  10. /**
  11. * blog http://www.micmiu.com
  12. *
  13. * @author Michael
  14. *
  15. */
  16. public class HelloClientDemo {
  17. public static final String SERVER_IP = "localhost";
  18. public static final int SERVER_PORT = 8090;
  19. public static final int TIMEOUT = 30000;
  20. /**
  21. *
  22. * @param userName
  23. */
  24. public void startClient(String userName) {
  25. TTransport transport = null;
  26. try {
  27. transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
  28. // 协议要和服务端一致
  29. TProtocol protocol = new TBinaryProtocol(transport);
  30. // TProtocol protocol = new TCompactProtocol(transport);
  31. // TProtocol protocol = new TJSONProtocol(transport);
  32. HelloWorldService.Client client = new HelloWorldService.Client(
  33. protocol);
  34. transport.open();
  35. String result = client.sayHello(userName);
  36. System.out.println("Thrify client result =: " + result);
  37. } catch (TTransportException e) {
  38. e.printStackTrace();
  39. } catch (TException e) {
  40. e.printStackTrace();
  41. } finally {
  42. if (null != transport) {
  43. transport.close();
  44. }
  45. }
  46. }
  47. /**
  48. * @param args
  49. */
  50. public static void main(String[] args) {
  51. HelloClientDemo client = new HelloClientDemo();
  52. client.startClient("Michael");
  53. }
  54. }

HelloServerDemo.java

  1. package com.micmiu.thrift.demo;
  2. import org.apache.thrift.TProcessor;
  3. import org.apache.thrift.protocol.TBinaryProtocol;
  4. import org.apache.thrift.protocol.TCompactProtocol;
  5. import org.apache.thrift.protocol.TJSONProtocol;
  6. import org.apache.thrift.protocol.TSimpleJSONProtocol;
  7. import org.apache.thrift.server.TServer;
  8. import org.apache.thrift.server.TSimpleServer;
  9. import org.apache.thrift.transport.TServerSocket;
  10. /**
  11. * blog http://www.micmiu.com
  12. *
  13. * @author Michael
  14. *
  15. */
  16. public class HelloServerDemo {
  17. public static final int SERVER_PORT = 8090;
  18. public void startServer() {
  19. try {
  20. System.out.println("HelloWorld TSimpleServer start ....");
  21. TProcessor tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(
  22. new HelloWorldImpl());
  23. // HelloWorldService.Processor<HelloWorldService.Iface> tprocessor =
  24. // new HelloWorldService.Processor<HelloWorldService.Iface>(
  25. // new HelloWorldImpl());
  26. // 简单的单线程服务模型,一般用于测试
  27. TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
  28. TServer.Args tArgs = new TServer.Args(serverTransport);
  29. tArgs.processor(tprocessor);
  30. tArgs.protocolFactory(new TBinaryProtocol.Factory());
  31. // tArgs.protocolFactory(new TCompactProtocol.Factory());
  32. // tArgs.protocolFactory(new TJSONProtocol.Factory());
  33. TServer server = new TSimpleServer(tArgs);
  34. server.serve();
  35. } catch (Exception e) {
  36. System.out.println("Server start error!!!");
  37. e.printStackTrace();
  38. }
  39. }
  40. /**
  41. * @param args
  42. */
  43. public static void main(String[] args) {
  44. HelloServerDemo server = new HelloServerDemo();
  45. server.startServer();
  46. }
  47. }

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程序编写)的更多相关文章

  1. apache thrift 入门(一)

    1.简介 Apache Thrift软件框架,是用来开发可扩展的跨语言的软件服务.通过软件堆栈和代码生成引擎相结合的方式来构建服务,使C++, Java, Python, PHP, Ruby, Erl ...

  2. JAVA程序编写入门

    在任意文件夹下创建一个文本,然后重命名,把文本后缀名改为.java.然后用eclipse打开此文件编写程序内容. public class nihao{ public static void main ...

  3. centos下apache thrift的安装

    参考:http://running.iteye.com/blog/1983463  thrift-0.9.0安装 最好切换到root用户操作,避免不必要的麻烦. 进行例子程序tutorial目录下,通 ...

  4. Lucene入门-安装和运行Demo程序

    Lucene版本:7.1 一.下载安装包 https://lucene.apache.org/core/downloads.html 二.安装 把4个必备jar包和路径添加到CLASSPATH \lu ...

  5. apache ab工具安装测试

    1.安装 安装包下载地址: 将 httpd-2.2.29.tar.gz 解压到目录 /apps/install/httpd-2.2.29 ,这是我放置的位置 cd /apps/install/http ...

  6. Docker入门-构建第一个Java程序

    定制镜像 准备一个没有第三方依赖的java web项目,可能参考示例maven结构项目: session-web.war 把该war上传到安装有docker软件的服务器上宿主目录下.在同级目录创建Do ...

  7. java 程序编写规则(自己总结)

    1.命名规范 (1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z).数字(0-9)和下划线"_". (2)类名是一个名词,采用大小写混合的方式,每个单词的首字母大写.例如:Us ...

  8. java程序编写需注意的问题

    初学java,免不了很多注意事项 加分号 类名与文件名一致 javac fileName而非javac fileName.class ```java System.out.println(" ...

  9. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_21-页面静态化-静态化测试-静态化程序编写

    public String getPageHtml(String pageId){ /** * 静态化程序获取页面的DataUrl * * 静态化程序远程请求DataUrl获取数据模型 * * 静态化 ...

随机推荐

  1. UML图总结

    UML叙述 UML文档仅仅是设计与开发人员采用UML语言进行系统分析与设计的结果,并没有给出如何进行开发和采用何种开发流程,同样也不指导如何进行面向对象设计. UML文档描述了面向对象分析与设计的结果 ...

  2. [Node.js]在windows下不得不防的小错误

    TypeError: Arguments to path.join must be strings at f (path.js:204:15) at Object.filter (native) at ...

  3. Davinci开发板DM368 nandwrite.c简要分析

    #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <limits.h ...

  4. .net如何后台批量删除

    button_Click(Sender sender,Event e){foreach (DataListItem item in DataList1.Items){CheckBox cbox=(Ch ...

  5. UVA 1212 Duopoly

    题目: 两个公司进行投标,竞争一些channels,每个投标可以包含多个channels,且都有一定的收益,每一个channels只能为其中的一个公司利用,同时保证一个公司给出的投标中选中的chann ...

  6. 在IIS上Office Word下载失败,检索 COM 类工厂中 CLSID 为000209FF的组件失败,80070005 拒绝访问。

    最近在做一个网站时,有一个下载word文档功能,在本地直接调试是可以下载的,但部署到IIS上就出现问题了. 出现问题如下:Error:下载简历方法出错:检索 COM 类工厂中 CLSID 为 {000 ...

  7. Jq合成事件绑定

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 检查DISPLAY设置时Xlib出现No protocol specified错误

    退出到root用户,执行xhost +命令后,再次切换到Oralce用户,执行runInstaller命令,错误消失

  9. REST总结

    REST是Roy Thomas Fielding博士于2000年在他的博士论文中阐述的一种架构风格和设计原则.REST并非一种协议或者标准,事实上它只是阐述了HTTP协议的设计初衷:现在HTTP在网络 ...

  10. javascript 高级程序设计学习笔记(面向对象的程序设计) 2

    在调用构造函数时会为实例添加一个指向最初原型的指针,我们可以随时为原型添加属性和方法,并且能在实例中体现出来,但如果是重新了原型对象,那就会切断构造函数与最初原型的联系. function Dog ( ...