让 thrift 兼容原生 json 数据调用的解决方案

发布于 2021-02-26 18:51:18 字数 1463 浏览 1548 评论 0

让 thrift 兼容原生 json 数据调用的部分解决方案 通常使用 thrift 时,服务端与客户端都依赖 thrift 提供的方法,有一些场景没办法直接引入thrift提供的文件,只能使用如 json 之类格式传输,可能导致之前的 thrift 接口需要修改来支持。

这里使用服务端采用 java 编写,与客户端也是采用了 thrift 协议调用,同时我做了一些封装来支持原生 json 调用。

先看看使用场景

struct UserInfo { 1: optional string name; 2: optional i32 age; }
service Services{ UserInfo blntest(1:UserInfo ui) }

客户端调用 blntest 方法时需要能发送对应的 json 数据如: {"name":"wxd","age":19} ,服务端不修改原来的thrift实现,并能正常解析json数据调用blntest并返回 json 数据。

思路

  1. {"name":"wxd","age":19} 转为对应的 UserInfo 请求对象。
  2. 利用thrift 提供的 TServiceClient 调用 blntest 方法,这里只需将原来的远程调用修改一下,也就是修改不做远程调用,直接把流对接到服务端的输入输出流。
  3. 返回数据UserInfo转为json数据。

讲解

1 与 3 这一步相对简单,很多第三方 json 工具都能做到。 主要修改点在是第二点:在service生成的client类中,有send_*** 方法,如blntest方法,客户需要调用 send_blntest方法发送请求数据,所以获取send_***方法输出的数据, 作为服务端process的输入流数据。 service中有 ***__result类 用在process返回数据后读取返回的数据。

使用 curl 模拟客户端 json 请求

curl -l -H "method:blntest" -H "Content-Type: application/json" 
-X POST -d '{"hb":{"page":{"rowNumber":10,"lastFlagInt":0,"lastFlagInt2":0,"pageNumber":0},
"device":"ios20","platform":1,"version":"1.0","chl":"myapp"},"i":0}
'http://127.0.0.1:8081/apij2j.do

具体实现 demo 参考https://github.com/donnie4w/thriftjson

thriftjson 项目算是一个demo,为了方便测试,服务端采用 springboot。启动之后便可以 curl 模拟测试。

以上是让 thrift 兼容原生json数据调用的解决方案的内容,更多 原生 调用 兼容 解决方案 数据 thrift json 的内容,请您使用右上方搜索功能获取相关信息。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

束缚m

文章 0 评论 0

alipaysp_VP2a8Q4rgx

文章 0 评论 0

α

文章 0 评论 0

一口甜

文章 0 评论 0

厌味

文章 0 评论 0

转身泪倾城

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文