具体的代码在
基于dump的本地缓存实现.
本来以为很简单的一次上线,没想到前后弄了差不多一个下午.最主要的问题有三个
问题一 MD5校验不通过
这个问题在daily完全没问题.但是到了线上就悲剧了..刚开始以为是不同机器上,计算md5值不一样造成的..后来我在不同机器算了几次,发现都是一样的...继续查,才发现是自己考虑不周..
这个问题,最初的错误在于
这本身没有什么问题,但是我在服务端缓存了一份计算好的MD5的值,然后每次客户端在dump数据流的时候,会重新更新这个MD5值..这看上去也没什么问题.但是
这个属于典型的自己埋雷自己踩.解决方式也很简单
问题二 hessian版本不一致
这个问题其实在发布的时候并没有直接遇到.我是在遇到 问题三的时候,怀疑了导致问题三的原因是不是hessian版本不一致.之前我在服务端使用的hessian版本是最高的 hessian4.0.7版本.但是我在客户端查看的时候,发现很多其他的dependency依赖了hessian 3.0.13. .最后请教了一下同事,好像说这边hessian版本默认就是3.0.13.因为其他版本经常会有bug. 比如看毕玄的这篇文章
http://www.blogjava.net/BlueDavy/archive/2009/08/06/290003.html
最后的解决方案就是,统一版本 hessian3.0.13
问题三 nginx 安全模块的一个坑
在线上,客户端启动初始化的时候,一直报 hessian反序列化出错.中间折腾很久,最后发现,线上的nginx安全模块为了防止utf7漏洞,自动在请求留中加了 \r\n .具体如下
哎,整一个悲剧..