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

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


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

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

  • 应用名APP: GoodsApp

  • 服务名Server: GoodsServer,DataServer

  • 服务提供者Servant: GoodsTarsObj,DataTarsObj

示例代码地址:

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

上一篇我们初步实现了GoodsServer服务,调用了Lua脚本函数来组装请求,接下来我们继续完善整个处理流程。具体交互为,GoodsClient发请求到GoodsServer;GoodsServer调用Lua脚本组装数据,发送请求到DataServer;GoodsServer收到应答后调用Lua脚本处理应答,然后发送应答数据给GoodsClient。流程如下:

图片

新增DataServer

主要用于给GoodsServer提供数据,协议如下:

简单实现接口,返回应答数据:

图片

完善Lua组包解包

通过Lua解析yaml定义的分组和分组请求信息:

通过Lua组装请求数据:

图片

转发请求到DataServer

首先获取服务调用代理,调用地址直接设置obj即可,不用设置具体IP和端口:

图片

组装请求数据并发送,即设置DataReq的相关参数:

图片

结果正常则获取应答数据,设置结果集用于Lua组装下个请求的入参:

图片

测试客户端GoodsClient

这里客户端不在Tars框架注册,所以需要指定服务端的IP和端口,直接使用GoodsServer定义的GoodsTars.tars协议,实现简单的同步调用过程:

图片

其中调用信息可以直接在Tars框架的web管理页面获取到:

图片

测试结果:

  • GoodsServer端:

图片

  • DataServer端:

图片

  • GoodsClient端:

图片

说明:

1.测试过程中,出现Lua脚本引用同目录下其他脚本,无法找到的问题,添加绝对路径后解决,需要看看有没有更好的处理方式;

2.打包过程需要将将Lua脚本和协议yaml文件一并打包上传,还需要调整打包上传脚本进一步实现;

3.目前Lua脚本打包后的JSON数据和协议定义请求应答序列化的JSON并不完全一致,有待进一步完善Lua脚本。完全匹配后直接可以使用协议中的readFromJsonString()函数来反序列化请求应答结构;

4.目前的方案是一种实验性质,需要验证与C++实现的性能对比,譬如耗时,然后根据业务需要来选择是否采用Lua脚本实现业务逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值