工作生活

thrift事件交互

2019-07-01  本文已影响0人  5eac0cfdd510

一、thrift

二、mac安装thrift步骤

 brew install thrift

三、thrift使用

namespace java cn.bintools.daios.example.thrift
service HelloService{
 i32 add(1:i32 num1,2:i32 num2)
}
##thrift文件生成的java文件
package cn.bintools.daios.example.thrift;
@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2019-05-14")
public class HelloService {
 
  public interface Iface {
 
    public int add(int num1, int num2) throws org.apache.thrift.TException;
 
  }
// ... 还有其他生成的方法、类等
}

四、thrift 语言

1)编写IDL文件时需要注意的问题
函数的参数要用数字依序标好,序号从1开始 形式:“序号:参数名”;
每个函数的最后要加上“,”最后一个函数不加;
在IDL中可以使用/.... ..../添加注释
2)IDL支持的数据类型
IDL大小写敏感,它共支持以下几种基本的数据类型:
[1]string, 字符串类型,注意是全部小写形式;例如:string aString
[2]i16, 16位整形类型,例如:i16 aI16Val;
[3]i32,32位整形类型,对应C/C++/java中的int类型;例如: I32 aIntVal
[4]i64,64位整形,对应C/C++/java中的long类型;例如:I64 aLongVal
[5]byte,8位的字符类型,对应C/C++中的char,java中的byte类型;例如:byte aByteVal
[6]bool, 布尔类型,对应C/C++中的bool,java中的boolean类型; 例如:bool aBoolVal
[7]double,双精度浮点类型,对应C/C++/java中的double类型;例如:double aDoubleVal
[8]void,空类型,对应C/C++/java中的void类型;该类型主要用作函数的返回值,例如:void testVoid(),
除上述基本类型外,IDL还支持以下类型:
[1]map,map类型,例如,定义一个map对象:map<i32, i32> newmap;
[2]set,集合类型,例如,定义set<i32>对象:set<i32> aSet;
[3]list,链表类型,例如,定义一个list<i32>对象:list<i32> aList;

五、项目搭建

<dependency>
  <groupId>org.apache.thrift</groupId>
  <artifactId>libthrift</artifactId>
  <version>0.12.0</version>
</dependency>

\color{#ea4335}{这里的版本号与生成helloServer.java的thrift的版本相同。不同则helloServer.java文件中会报错:@org.apache.thrift.annotation.Nullable 缺少}

public class HelloServiceImpl implements HelloService.Iface{
  public int add(int num1,int num2) throws IException{
   return num1+num2
  }
}
package impl;

import cn.bintools.daios.example.thrift.HelloService;
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.TServerTransport;
import org.apache.thrift.transport.TTransportException;

/**
* 服务端
*
* @author <a href="jian.huang@bintools.cn">yunzhe</a>
* @version 1.0.0 2019-05-14-下午4:23
*/
public class HelloServiceDemo {

   public static void main(String[] args) {
       try {
           HelloService.Processor<HelloServiceImpl> processor = new HelloService.Processor<HelloServiceImpl>(new HelloServiceImpl());
           TServerTransport serverTransport = new TServerSocket(8888);
           TServer.Args param = new TServer.Args(serverTransport);
           param.processor(processor);
           param.protocolFactory(new TBinaryProtocol.Factory());

           TServer server = new TSimpleServer(param);
           System.out.println("Starting Thrift Server ... ...");
           server.serve();
       } catch (TTransportException e) {
           e.printStackTrace();
       }
   }
}
package impl;
import cn.bintools.daios.example.thrift.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;
 
/**
 * 客户端
 *
 * @author <a href="jian.huang@bintools.cn">yunzhe</a>
 * @version 1.0.0 2019-05-14-下午4:29
 */
public class HelloServiceClient {
    public static void main(String[] args) {
        try {
            TTransport tTransport = new TSocket("127.0.0.1", 8888);
            tTransport.open();
 
            TProtocol protocol = new TBinaryProtocol(tTransport);
            HelloService.Client client = new HelloService.Client(protocol);
            System.out.println(client.add(200,200));
            tTransport.close();
        } catch (TTransportException e) {
            e.printStackTrace();
        }catch (TException e){
            e.fillInStackTrace();
        }
    }
}

码云地址:https://gitee.com/huangjian163/thirft.git

六、总结

在本地搭建thrift并通过命令生成需要的语言的文件目前已经可以正常和使用。但是如何集成到spring boot项目中?请查看下一篇文章,地址为:https://www.jianshu.com/p/3ca4a44c2a4c

上一篇下一篇

猜你喜欢

热点阅读