Thrift第一个示例
来源:互联网 发布:各种编程语言的用途 编辑:程序博客网 时间:2024/05/22 13:54
第一步:引入thrift依赖包
compile group: 'org.apache.thrift', name: 'libthrift', version: '0.9.3'
第二步:创建配置文件HelloService.thrift
// 定义命名空间namespace java com.mhy.thrift.gen// 定义Serviceservice HelloService { //定义方法 string sayHello(1: string username)}
第三步:生成代码
在命令行下执行如下命令
➜ thrift lsHello.thrift➜ thrift thrift --gen java HelloService.thrift➜ thrift lsHelloService.thrift gen-java
生成完之后的项目结构如下
其中gen-java下生成的结果一般是一种API的描述,这个东西就是提供给服务调用方来使用,而我们还需要针对于这个API来做实现
接下来把生成的代码文件拷贝到项目源码目录下面
其中gen包下就是通过Thrift生成的IDL(Interface Defination Language),client包下存放客户端代码,server包下存放服务端代码。
第四步:服务接口实现
package com.mhy.thrift.server;import com.mhy.thrift.gen.HelloService;import org.apache.thrift.TException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @author mahaiyuan * @ClassName: HelloServiceHandler * @date 2017-05-04 下午2:29 */public class HelloServiceHandler implements HelloService.Iface { private static final Logger logger = LoggerFactory.getLogger(HelloServiceHandler.class); @Override public String sayHello(String username) throws TException { logger.info("HelloServiceHandler.sayHello username={}", username); return "Hello " + username; }}
编写服务端启动类
package com.mhy.thrift.server;import com.mhy.thrift.gen.HelloService;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.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @author mahaiyuan * @ClassName: HelloServer * @date 2017-05-04 下午2:38 */public class HelloServer { private static final int SERVER_PORT = 8888; private static final Logger logger = LoggerFactory.getLogger(HelloServer.class); public static void main(String[] args) { logger.info("HelloServer start server ......."); try { TProcessor tprocessor = new HelloService.Processor<HelloService.Iface>(new HelloServiceHandler()); // 简单的单线程服务模型,一般用于测试 TServerSocket serverTransport = new TServerSocket(SERVER_PORT); 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) { logger.warn("HelloServer exception.", e); } }}
编写客户端实现
package com.mhy.thrift.client;import com.mhy.thrift.gen.HelloService;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.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @author mahaiyuan * @ClassName: HelloClient * @date 2017-05-04 下午2:48 */public class HelloClient { private static final Logger logger = LoggerFactory.getLogger(HelloClient.class); public static final String SERVER_IP = "localhost"; //服务端地址 public static final int SERVER_PORT = 8888; //服务端端口 public static final int TIMEOUT = 30000; //超时时间 public static void main(String[] args) { String username = "张三"; TTransport transport = null; try { transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT); // 协议要和服务端一致 TProtocol protocol = new TBinaryProtocol(transport); HelloService.Client client = new HelloService.Client( protocol); transport.open(); logger.info("call sayHello username={}", username); String result = client.sayHello(username); logger.info("call sayHello result={}", result); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { e.printStackTrace(); } finally { if (null != transport) { transport.close(); } } }}
接下来先启动服务端,然后再运行客户端。在控制台下得到如下结果
服务端控制台下输出的内容
[main] INFO com.mhy.thrift.server.HelloServer - HelloServer start server .......[main] INFO com.mhy.thrift.server.HelloServiceHandler - HelloServiceHandler.sayHello username=张三
客户端控制台下输出的内容
[main] INFO com.mhy.thrift.client.HelloClient - call sayHello username=张三[main] INFO com.mhy.thrift.client.HelloClient - call sayHello result=Hello 张三
代码地址:https://github.com/mhy2011/thrift-examples
0 0
- Thrift第一个示例
- 第一个struts2示例
- struts2 第一个示例
- DWR第一个示例
- 第一个quartz示例
- Servlet第一个示例
- 第一个activemq 示例
- SpringBoot第一个示例
- 第一个objective-c 示例
- GWT第一个示例HelloWorld
- dwr 第一个示例 配置
- 第一个spring mvc示例
- Android第一个NDK示例
- 第一个maven示例-helloworld
- 第一个spring boot示例
- 打造第一个Spring AOP的示例
- 第一个perl cgi请求示例
- 第一个C++上机报告(示例)
- 深入java static关键字 浅析java类加载机制(解答java静态方法或变量无法访问非静态数据)
- aspx中如何直接调用类库中的方法
- 对 synchronized 的个人理解
- 【NSA黑客工具包】Windows 0day验证实验
- uboot启动过程之概述
- Thrift第一个示例
- Java 多线程编程总结
- Uboot,内核,设备树编译步骤
- Maven pom.xml 文件解析
- 在Ubuntu12.0.4下搭建TFTP服务器
- js实现联想搜索
- 从jBPM3到jBPM5 与 Activiti5的爱恨情仇
- $.ajax()方法详解
- ListView之BaseAdapter