玩转thrift转http

1 有时候我们为了thrift的也能自动支持http访问,需要处理一下。

于是想到了json-rpc,找了一下,有人已经有人同样解决过:https://www.jianshu.com/p/a757453523ae

2 改进

上面这个文章的思路是没问题,但是关于他想做开源的源码级别上的修改,

我觉得这样以后升级会是个麻烦,于是花了一个小时仔细琢磨了一下,发现还是有个空子可以钻。

我是做了两个地方的改进,就可以完成不需要改开源的源码

  2.1 改进点1

玩转thrift转http

  这个空子就涉及到

  玩转thrift转http

  钻空子也很简单,利用反射就完成了

玩转thrift转http

只需要在系统启动的时候就开始更新即可

但是有一点特别重要,这个map维护的是接口中变量名的关系,如果是兼容jdk8之前的,需要稍微多一个环节,那就是从实现类中取方法中的变量名,从接口中取同名的method然后维护这个关系即可

只简单比较同名会不会出问题呢?

我翻了一下源码

com.googlecode.jsonrpc4j.ReflectionUtil#findCandidateMethods

玩转thrift转http

可见他就是简单比较个名字,json-rpc估计无法处理重载

3  前面说到我是提前维护这个map,这个map其实就是要变量与注解的关系

呃,看了一下,构建annotation需要一个继承即可

 

4 顺便说第一句,第一次玩这玩意,日志是需要的吧

client端我翻了一下源码,在这里可以看到原始请求,服务端的由于时间关系,我随意用了一个interceptor,不知道是不是最佳方案

com.googlecode.jsonrpc4j.JsonRpcClient#internalWriteRequest

玩转thrift转http

5 顺便说一句如何过滤thrift转json多余字段的问题。

我直接采用MixIn来完成的。细节不再描述