发表于: 2018-03-16 21:06:00

1 725


任 务 八 总 结

今天完成的事情:任务八收尾工作以及线上部署

我任务八的完成度还算高的吧,完成了跨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。


返回列表 返回列表
评论

    分享到