1: https://www.cnblogs.com/chenny7/p/4224720.html thrift原理和使用
2:生成java的thrift文件:
(1)先创建一个服务Hello.thrift:
namespace java com.ayue.thrift.protocol
service Hello{
string helloString(1:string para),
}
(2)生成文件Hello.thrift
环境为windows,直接去https://thrift.apache.org/download下载.exe文件,然后创建一个批处理文件Thrift-test.bat
thrift-0.10.0.exe -r --gen java Hello.thrift
,之后将服务Hello.thrift,下载好的exe文件和Hello.bat放在同一文件夹下,在文件夹中找到Thrift-test.bat文件双击执行。这时发现在当前目录下多了一个gen-java的目录,里面的有一个Hello.java的文件.这个java文件包含Hello服务的接口定义Hello.Iface,以及服务调用的底层通信细节,包括客户端的调用逻辑Hello.Client以及服务端的处理逻辑Hello.Processor。
3:(1):maven中添加相关依赖:
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.10.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
(2):创建HelloServiceImpl实现Hello.Iface接口:
package com.ayue.thrift.service;
import org.apache.thrift.TException;
import com.ayue.thrift.protocol.Hello.Iface;
/**
* @author ayue
*/
public class HelloServiceImpl implements Iface {
@Override
public String helloString(String para) throws TException {
System.out.println("回调服务端");
return "result:" + para;
}
}
(3):创建服务端实现代码HelloServiceServer
package com.ayue.thrift.service;
import java.lang.reflect.Constructor;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.thrift.TMultiplexedProcessor;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadedSelectorServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;
/**
* @author ayue
*/
public class HelloServiceServer {
Map<String, Object> serviceMap;
@SuppressWarnings({ "unchecked", "rawtypes" })
public void start() throws Exception {
TNonblockingServerSocket tnbSocketTransport = new TNonblockingServerSocket(9898);
TMultiplexedProcessor processor = new TMultiplexedProcessor();