玩转thrift转http
1 有时候我们为了thrift的也能自动支持http访问,需要处理一下。
于是想到了json-rpc,找了一下,有人已经有人同样解决过:https://www.jianshu.com/p/a757453523ae
2 改进
上面这个文章的思路是没问题,但是关于他想做开源的源码级别上的修改,
我觉得这样以后升级会是个麻烦,于是花了一个小时仔细琢磨了一下,发现还是有个空子可以钻。
我是做了两个地方的改进,就可以完成不需要改开源的源码
2.1 改进点1
这个空子就涉及到
钻空子也很简单,利用反射就完成了
只需要在系统启动的时候就开始更新即可
但是有一点特别重要,这个map维护的是接口中变量名的关系,如果是兼容jdk8之前的,需要稍微多一个环节,那就是从实现类中取方法中的变量名,从接口中取同名的method然后维护这个关系即可
只简单比较同名会不会出问题呢?
我翻了一下源码
com.googlecode.jsonrpc4j.ReflectionUtil#findCandidateMethods
可见他就是简单比较个名字,json-rpc估计无法处理重载
3 前面说到我是提前维护这个map,这个map其实就是要变量与注解的关系
呃,看了一下,构建annotation需要一个继承即可
4 顺便说第一句,第一次玩这玩意,日志是需要的吧
client端我翻了一下源码,在这里可以看到原始请求,服务端的由于时间关系,我随意用了一个interceptor,不知道是不是最佳方案
com.googlecode.jsonrpc4j.JsonRpcClient#internalWriteRequest
5 顺便说一句如何过滤thrift转json多余字段的问题。
我直接采用MixIn来完成的。细节不再描述