发表于: 2017-09-07 22:14:49

1 821


一.今天完成的主要事情

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

顺便学到一条,有问题时可以看看相应的官方文档的常见问题那块,有些问题的解决方式在官网上已经提出来了

四.收获

以上

五,任务进度情况

暂无延期风险



返回列表 返回列表
评论

    分享到