java thrift spring_Spring Boot 中使用 thrift 入门

Thrift 简介

Thrift 是什么

Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

Thrift 的功能

Thrift允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。

环境安装

基于MAC环境,打开终端,执行如下命令:

brew install thrift

查看是否安装成功:

thrift -version

使用示例

Maven 依赖

在服务端和客户端的 pom.xml 中添加 Thrift 依赖(版本和安装时保持一致):

org.apache.thrift

libthrift

0.11.0

编写服务端 Thrift 文件

hello.thrift

namespace java com.hans.thriftserver

service Hello{

string helloString(1:string param)

}

使用 Thrift 工具生成 java 代码

thrift -r -gen java hello.thrift

修改 namespace java com.hans.thriftclient 后再次执行则生成客户端 java 代码

将代码放到对应目录

即 com.hans.thriftserver 子目录 thrift 下

编写服务实现类

package com.hans.thriftserver.thrift.impl;

import com.hans.thriftserver.thrift.Hello;

import org.apache.thrift.TException;

public class HelloServiceImpl implements Hello.Iface {

@Override

public String helloString(String param) throws TException {

return "hello: " + param;

}

}

编写服务端

package com.hans.thriftserver;

import com.hans.thriftserver.thrift.Hello;

import com.hans.thriftserver.thrift.impl.HelloServiceImpl;

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.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

/**

* @author huangxun

*/

@SpringBootApplication

public class ThriftServerApplication {

public static void main(String[] args) {

SpringApplication.run(ThriftServerApplication.class, args);

try {

System.out.println("服务端开启....");

TProcessor tprocessor = new Hello.Processor(new HelloServiceImpl());

// 简单的单线程服务模型

TServerSocket serverTransport = new TServerSocket(9898);

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) {

e.printStackTrace();

}

}

}

编写客户端

package com.hans.thriftclient;

import com.hans.thriftclient.thrift.Hello;

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.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

/**

* @author huangxun

*/

@SpringBootApplication

public class ThriftClientApplication {

public static void main(String[] args) {

SpringApplication.run(ThriftClientApplication.class, args);

System.out.println("客户端启动....");

TTransport transport = null;

try {

transport = new TSocket("localhost", 9898, 30000);

// 协议要和服务端一致

TProtocol protocol = new TBinaryProtocol(transport);

Hello.Client client = new Hello.Client(protocol);

transport.open();

String result = client.helloString("hans");

System.out.println(result);

} catch (TTransportException e) {

e.printStackTrace();

} catch (TException e) {

e.printStackTrace();

} finally {

if (null != transport) {

transport.close();

}

}

}

}

启动服务端

后台打印输出:

服务端开启....

执行客户端

后台打印输出:

客户端启动....

hello: hans

Github 完整代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值