前几天应两个哥们的需求,需要一个http协议的thrift服务,具体的需求2点:
1.请求方式是http,然后采用thrift序列化。
2.能够传递隐藏参数在http的header里。
这个周末,2个下午,在公司整出了一个beta版本,具体还有很多地方需要优化,下面会列出具体的优化点。代码地址:https://github.com/yankai913/dubbo-http-thrift,感兴趣的哥们可以去看下。
先说说thrift,如果Getting Started,直接官网http://thrift.apache.org/即可,这里说一下目前最新的版本是0.9.1的新特性,地址:https://issues.apache.org/jira/browse/THRIFT-563,简单点说就是,以前的版本一个端口只能暴漏一个服务,原因取决于TMessage的只传了methodName,而最新的版本methodName里包含了serviceName和methodName,这样,就算方法名相同,但是还有serviceName可以区分,这样一个端口就可以暴露多个服务了。
再说说dubbo,如果Getting Started,直接官方https://github.com/alibaba/dubbo,这里说下关于http的,dubbo暴露http服务时,httpServer有2种,一种是内嵌jetty,在jetty里开个用来处理请求的线程池,这种是默认的,另一种是servlet,配置里是server=servlet,但是它依赖于servlet容器启动来暴露服务,例如tomcat,处理线程交给tomcat管理,这种是推荐的。使用http时,采用了2种序列化,hessian和java自身的序列化,这里加了一种thrift的序列化。
接着说说优化点:
1.代码里写着需要优化或者TODO的地方都要修复。
2.注意类的加载避免内存溢出,减少字节数组的复制。
3.thrift里的序列化方式,代码里hardCode了是二进制,其他的方式应该还有json什么的,需要做个开关,自由选择。
4.序列化和反序列化的优化。
5.暴漏扩展handler。
6.异常容错的处理和response响应里的异常处理。