Tars微服务框架C++开发之Lua脚本

以下为授权转载的一盎司科技公众号文章


Tars是腾讯开源的基于名字服务的高性能RPC开发框架,也是一套开发模式,接下来我们将简单介绍C++开发服务中,引入Lua脚本语言来开发某些业务场景。关于框架的详细说明可参考官方文档(https://doc.tarsyun.com)。

以下以一个示例来作为参考,来说明具体的开发过程:

  • 应用名APP: GoodsApp

  • 服务名Server: GoodsServer

  • 服务提供者Servant: GoodsTarsObj

示例代码地址:

GitHub地址:https://github.com/iounce/tars-demo

Gitee地址:https://gitee.com/iounce_admin/tars-demo

环境

  • Windows操作系统:Windows10(21H2,19044.1766)

  • Linux操作系统:Ubuntu 22.04 LTS

  • Docker Desktop:v4.10.1

  • Tars framework: 3.0.14

  • Python:3.10.4

  • Lua:5.4.6

生成服务模板代码

使用Tars框架自带脚本,自动生成服务模板代码,执行以下命令:

/usr/local/tars/cpp/script/cmake_tars_server.sh GoodsApp GoodsServer GoodsTars

代码生成后,从容器将代码拷贝到本地,可以使用如下命令(具体可根据实际情况修改):

docker cp -a 84d040a770c1:/root/GoodsApp  D:\iounce\src\tars\ 

图片

服务代码采用的CMake管理,编译打包比较方便,详情可参考官方说明。

定义接口文件

直接修改生成的GoodsTars.tars文件,增加接口定义,包括出入参等。

图片

初步实现服务

修改接口实现类GoodsTarsImp的继承类,并增加接口函数的实现。

图片

Lua业务脚本

可以在业务接口增加通用业务的处理逻辑,对于细分的某个具体功能则可以将入参和出参,特别是数据处理过程放到脚本中实现。这样的好处是,如果业务有变动,主服务不用频繁修改,只需要修改脚本即可完成更新,无需重新编译等复杂操作。

  • YAML协议定义

按功能号定义协议文件,譬如获取商品信息接口功能号为100,则协议文件定义为protocol_100.yaml,支持多个分组,每个分组支持多个请求,同时定义出入参。

图片

  • 业务脚本实现

针对每个协议文件,定义脚本来解析,并处理出入参,包括请求和应答数据打包,这里定义功能号100对应的Lua脚本protocol_100.lua。

图片

这里定义了公共的API类,方便对所有协议作统一管理,这样在各个业务协议解析脚本中,可以统一使用API类接口来处理。

图片

调用业务脚本

协议解析后,需要在C++函数中使用,这里也对应定义了C++的API类,对应调用Lua脚本中的api.lua,这样C++与Lua就可以关联起来。

图片

这里ApiProtocol类主要实现Lua环境初始化,即对api.lua脚本中函数的调用,如获取协议分组,协议请求打包等。

接下来就可以在业务实现类中调用此类,实现具体的业务处理,包括各个分组的请求发送等。

图片

这样,使用C++调用Lua脚本来实现业务处理的基本逻辑就完成了,这里还要处理应答的部分,后续待完善。

说明:

  1. Lua脚本中使用到了三方库YAMLParserLite.lua来解析YAML文件,可以使用其他库代替或自行编写解析逻辑;

  2. C++中使用了三方库rapidjson用来解析JSON,可以其他库代替或自行编写解析逻辑;

  3. 由于是在Tars框架docker容器中编译,所以需要手动安装Lua环境(可以手动编译),后续待完善;

  4. 目前实现了基本逻辑,后续完整的流程还要完善,譬如从客户端发请求到服务端获取数据后返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值