发表于: 2018-03-16 21:06:00
1 723
任 务 八 总 结
今天完成的事情:任务八收尾工作以及线上部署
我任务八的完成度还算高的吧,完成了跨ip的springRMI部署,由一台服务器上的一个客户端,随机访问另一台机器上的两个服务端
其实这里的坑挺多的,不是简简单单换个机器换个ip的问题,我昨天其实也说过,要自己写一个监听器配置:
然后配置到web.xml里面配置:
这样子基本上大功告成了,但是还是要留心,客户端和service传输的东西应该是对象的本身数据,也就是说,对象应该是实现序列化接口的,比如:
其他没有什么,感觉都比较简单,都是复制几份,然后删点改点文件的事情。下面,稍微有点意思的东西来了,怎么做到随机访问?
因为我弄了两个server实例,每一个实例三个service,所以要做一下分组,让它看起来不那么乱:
然后客户端spring的配置文件:
这里要注意,因为spring的@Autowried是按照类型装配的,比如说,我现在一个service接口,对应有两个bean,怎么识别?
所以@Autowried时需要额外配置,比如:
Qualifier里面写的是bean的id,这样子就能识别并且装配了。
然后在分配器里面写一个随机获取的方法,比如:
到目前为止,貌似所有的问题都已经解决了。
但是,千万别忽略最难也是最重要的一点,怎么避免server宕机造成的服务异常!也就是说,怎么准确识别哪些机子宕机了!
刚开始我想的很简单,以为try-catch中弄个list,移除对应的异常服务器就行,比如:
然而,发现异常抛不到controller里面,根本抓不到!最后被我的异常拦截器抓到了:
抛出点是RMI生成的一个拦截器里面....在controller里面别想捕获
之后我和成都的首席讨论了一下,最后完善出一个方案:既然抓不到异常,那就反着来:
由server服务器向缓存服务器每500ms发送“生存报告”,然后要用的时候,由客户端去检测是否存在有相应的定时缓存。
定时任务我用的是Quartz做的:
我这里是spring自动扫描+标签的方式装配的:
然后在客户端检测:
然后发布线上测试,完美运行,基本上看不出性能的影响,不知道比反复加载web容器不知道高了几个量级。
明天计划的事情:任务9
遇到的问题:null,昨天前天都解决了
收获:学习了很多新的知识点,比如Quartz。
评论