发表于: 2016-12-16 21:46:56
1 1881
今天完成的事情:
1)部署两台service在虚拟机,使用本机一台web端随机连两台service
2)部署两台service在虚拟机,使用本机两台web端在nginx分配下随机连两台service
3)任务9基本完成
明天计划的事情:
按照禅道计划
遇到的问题:
如下4点主要是讲如何解决今天完成的 第 1)点
1)前情提要:今天任务的难点还是在于如何让一个web端可以随机访问两个service,并且在其中一个service宕机又重启的情况下,如何在web端不重启的前提下,重新连接到这个service
今天没有沿用任务8使用非单例proxybean来解决这个问题
乱想了另一种方法,在web端定义静态SCADomain变量,抛弃了spring对SCADomain的实例化操作
2)SCADomain:tuscany是通过生成composite构件来初始化每个类(组件)的,而我们是使用SCADomain类加载.composite文件来生成构件的,如下
SCADomain s=SCADomain.newInstance("rmiclient.composite");
然后我们可以从SCADomain中取得想要的组件,如下
UserService userService=s.getService(UserService.class, "UserComponent");
而我们使用rmi方式将接口绑定在某个ip端口上,也是通过tuscany的组件形式进行的
3)web端新建一个类(加@Component扫描),里面只定义两个成员变量
protected static SCADomain SCADomain1;
protected static SCADomain SCADomain2;
4)web端新建一个ServiceGenerateUtil类,专门用于返回从service端拿到的接口实例
在try中,根据随机数,随机从两个SCADomain中拿到接口实例(在web端部署并初始化后,接收到的第一次访问请求,是一定会连接异常进入catch的,因为我们一开始并没有初始化SCADomain,而是靠的catch中的操作对SCADomain进行初始化的,然后因为SCADomain是我们设置的一个静态成员变量,一次初始化,后边可以一直使用)
在catch中,考虑到service宕机重启的情况,捕获到连接异常,进行换service的处理
在更换service之前,重新加载SCADomain,重新试图连接已宕机有可能重连的service
考虑到一种极端情况,1号service宕机,然后重启,2号这时也掉链子了(也就是说这时只有一个重启过了的1号),在初次try中,我们是没有加载SCADomain的操作的(因为几乎所有正常的访问都在初次的try中进行,不可能每次访问都重连一次),所以访问到1号service时,是会报连接异常的,然后进入初次的catch,试换到2号service,这时2号service已经挂了,于是又连接异常了,这时我们就需要再加个try/catch,捕获异常进入次级catch,重新换回去连1号,重新加载SCADomain,连接成功
收获:
暂无
评论