前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >thrift/swift:codegen-thrift java代码生成器

thrift/swift:codegen-thrift java代码生成器

作者头像
10km
发布2019-05-25 22:24:00
5980
发布2019-05-25 22:24:00
举报
文章被收录于专栏:10km的专栏10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433683

codegen-thrift 是最近我完成的一个java代码生成程序,实现从普通接口类型生成基于thrift/swift框架的service/client 端封装java代码.这个工具可以让你在不修改现有的接口定义的情况下,自动生成基于现有接口的thrift service /client代码,实现client端通过网络对服务端接口的透明调用。

支持byte[],Date,float,Float,URI,URL类型的自动转换.

执行 java -jar target/codegen-thrift-1.0.0-SNAPSHOT-standalone.jar -help 显示运行参数说明.

参数说明

代码语言:javascript
复制
    -ic,--interface-class 要生成thrift代码的接口类名
    -rc,--reference-class 实现interface-class接口的一个类名(可选),如果不指定,生成的接口方法中参数名为arg1,arg2... 
    -p,--package <arg> 输出代码的包名
    -o,--output <arg> 代码输出位置
    -gt,--task-type 生成代码的类型:CLIENT,SERVICE

下面以thrift.test.original.TestInterface类为例,说明代码生成的过程

生成service端代码

代码语言:javascript
复制
java -jar target\codegen-thrift-1.0.0-SNAPSHOT-standalone.jar ^
    -ic thrift.test.original.TestInterface ^ 
    -rc thrift.test.original.TestInterface$BaseImpl ^
    -p thrift.test.service ^
    -o J:\codegen\codegen-thrift\src\test\java ^
    -gt SERVICE

生成代码中https://gitee.com/l0km/codegen/blob/master/codegen-thrift/src/test/java/thrift/test/service/TestInterfaceThriftDecorator.javathrift.test.original.TestInterface对应thrift service端实现类。

生成thrift client代码

生成IDL文件

代码语言:javascript
复制
gen-thrift.bat

https://gitee.com/l0km/codegen/blob/master/codegen-thrift/gen-thrift.bat

生成thrift client端数据类型及接口定义

代码语言:javascript
复制
gen-client.bat

https://gitee.com/l0km/codegen/blob/master/codegen-thrift/gen-client.bat

生成 client代码:

代码语言:javascript
复制
java -jar target\codegen-thrift-1.0.0-SNAPSHOT-standalone.jar ^
    -ic thrift.test.original.TestInterface ^
    -rc thrift.test.original.TestInterface$BaseImpl ^
    -p thrift.test.client ^
    -o J:\codegen\codegen-thrift\src\test\java ^
    --thrift-package thrift.test.client.thrift ^
    -gt CLIENT

生成的代码中https://gitee.com/l0km/codegen/blob/master/codegen-thrift/src/test/java/thrift/test/client/TestInterfaceThriftClient.javathrift.test.original.TestInterface接口对应的 thrift client端实现。

启动服务

因为已经基于TestInterface接口自动生成了对应的service服务实现TestInterfaceThriftDecorator,所以将一个TestInterface接口实例启动为thrift服务就非常简单了:

代码语言:javascript
复制
    InternalLoggerFactory.setDefaultFactory(new Slf4JLoggerFactory());
    ThriftServerService service = ThriftServerService.bulider()
            .withServices(new TestInterfaceThriftDecorator(new TestInterface.BaseImpl()))
            .setServerPort(32232)
            .build();
    service.startAsync();

client 端创建thrift 接口实例

因为client的TestInterfaceThriftClient基于thrift框架实现了TestInterface接口,只要创建了TestInterfaceThriftClient实例,就可以像普通的接口实例一样调用,网络传输,数据类型转换等工作都由TestInterfaceThriftClient自动完成。

代码语言:javascript
复制
    // TestInterface 的thrift client实例
    TestInterface clientInstance = ClientFactory
            .builder()
            .setHostAndPort("127.0.0.1", 32232)
            .build(TestInterface.class, TestInterfaceThriftClient.class);
    // 调用接口
    clientInstance.test(null, 0, null, null, null);

生成代码的依赖

代码语言:javascript
复制
<dependency>
    <groupId>com.gitee.l0km</groupId>
    <artifactId>common-thrift</artifactId>
    <version>1.0.3-SNAPSHOT</version>
</dependency>

依赖库git仓库https://gitee.com/l0km/common-java/tree/master/common-thrift

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生成service端代码
  • 生成thrift client代码
    • 生成IDL文件
      • 生成thrift client端数据类型及接口定义
      • 生成 client代码:
      • 启动服务
      • client 端创建thrift 接口实例
      • 生成代码的依赖
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档