发表于: 2017-09-07 22:14:49
1 820
一.今天完成的主要事情
1.实现springrmi对原有项目的service和web的分离
首先纠正昨天的认识误区,有了spring一样也还是有几个service就要创建几个接口,spring的主要作用是帮助我们处理异常,因为使用传统的java rmi,注册在远程对象注册表中的接口和接口实现必须要实现Remote接口,实现该接口就必须要处理各种异常,这样会污染我们的代码,使我们不能够专心于业务逻辑,而使用springrmi就可以通过配置文件帮我们实现Remote接口并且处理好异常,我们就不需要自己处理异常
首先,在服务端依然创建接口,service包中的类继承该接口,只是这个接口不需要实现Remote,service包中的类也不需要再继承UnicastRemoteExporter类.具体代码不贴了,基本和昨天的代码相同
其次,在xml文件中配置服务端,代码如下:
然后在main方法中通过该配置文件加载对象即可.
这样,spring会自动帮我们将服务注册到远程服务链接上
下一步是配置客户端
同样要先编写相应接口,然后是配置客户端的配置文件:如下
然后,在需要使用远程方法的地方就可以通过配置文件获取对象,调用相应的方法.
2.部署两台service,在web端可以随机访问其中的一台service
首先在web端配置两个xml文件,每一个分别对应一个service.
然后在通过配置文件获取对象时随机使用两个中的任意一个,如果其中一个获取不成功,说明该服务挂了,这是就使用另一个
通过这种方式保证了其中一个服务挂掉也不会影响程序正常跑,但是这样做有一个限制,原先我们的的contoller都是单例模式,即所有请求都只使用一个controller对象,但是如果要使用这种方法,就必须使用多对象的模式,否则一个服务停止,就会出错.那么我们需要为每次请求都创建一个controller对象,这样做的代价是效率特别慢,因为每个请求都要创建对象,非常消耗性能,这点明天再想想办法,看能不能再改进一些
3.将service部署到服务器上,然后再本地跑web,访问本地web,本地web调用服务器上的service.
基本就是更改一下端口,打包到服务器上运行,但是在启动web时出问题,
总是报连接超时的错误,后来查看发现是服务器有两个ip,内网和外网,服务端绑定时默认是绑定的内网ip,而web端只能访问外网ip,所以会报错.
今天被这个问题困扰了很久,最后通过google在官网的常见问题中找到解决方式
官网解决该问题的地址为:http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/faq.html#netmultihomed
该问题的描述为:
总之就是要么在服务注册到远程之前更改rmi的绑定ip,要么再运行服务时加上上面提示的这句,
再注册之前更改rmi的绑定ip的代码为:
然后在服务器上运行服务时可以加上这句:
二.明天的计划
1.用负载均衡跑两个web,实现任务要求
2.改进之前提到的问题,看有没有其他的更好的解决方式
3.如果有时间,深度思考
三.遇到的问题
以上,最后解决还是通过google+baidu
顺便学到一条,有问题时可以看看相应的官方文档的常见问题那块,有些问题的解决方式在官网上已经提出来了
四.收获
以上
五,任务进度情况
暂无延期风险
评论