发表于: 2017-12-18 22:21:18

1 686


今天完成的事情:

  • 1.去Spring的官方网站查找Spring RMI 的官方手册,将原有学员系统中Service中拆分出来,变成一个RMI的Service。
  • 2.在原来的WEB中调用Service。
  • 3.部署两台Service,在WEB中随机访问任意一台Service。


明天计划的事情:

  • 4.部署两台WEB,通过Nginx配置两台WEB随机访问,两台WEB可以随机访问两台Service。

遇到的问题:一个service对应一个端口,在实际项目中肯定有很多service接口,难道要注册很多端口吗

收获:

 1.去Spring的官方网站查找Spring RMI 的官方手册,学习Spring RMI

  找不到和rmi相关的,网上也都是spring rmi的实现,没什么解释

看了下师兄们的日报,先从java rmi起了解

https://www.cnblogs.com/dongguacai/p/5617698.html


RMI的定义

RPC (Remote Procedure Call):远程进程调用,用于一个进程调用另一个进程中的过程,从而提供了过程的分布能力。

RMI(Remote Method Invocation):远程方法调用,即在RPC的基础上有向前迈进了一步,提供分布式对象间的通讯。允许运行在一个java 虚拟机的对象调用运行在另一个java虚拟机上对象的方法。这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。

RMI的全称宗旨就是尽量简化远程接口对象的调用。

RMI大大增强了java开发分布式应用的能力,例如可以将计算方法复杂的程序放在其他的服务器上,主服务器只需要去调用,而真正的运算是在其他服务器上进行,最后将运算结果返回给主服务器,这样就减轻了主服务器的负担,提高了效率(但是也有其他的开销)。

RMI网络模型

在设计初始阶段,我们真正想要的是这样一种机制,客户端程序员以常规方式进行方法调用,而无需操心将数据发送到网络上或者解析响应之类的问题。所以才有了如下的网络模型:在客户端为远程对象安装一个代理。代理是位于客户端虚拟机中的一个对象,它对于客户端程序来说,就像是要访问的远程对象一样。客户端调用此代理时,只需进行常规的方法调用。而客户端代理则负责使用网络协议与服务器进行联系。

照着这个例子敲一个demo

http://blog.csdn.net/zmx729618/article/details/52130722

远程对象的接口必须扩展Remote接口,它位于java.rmi包中。接口中所有的方法必须声明抛出RemoteException异常。这是因为远程方法总是存在失败的可能,所以java编程语言要求每一次远程方法的调用都必须捕获RemoteException,并且指明当调用不成功时应执行的相应处理操作。

实现类

接口的实现类同时要实现Serializable接口,这里继承UnicastRemoteObject也是间接实现Serializable接口,同时,因为构造方法需要抛出RemoteException,所以不能缺省使用隐含的无参构造方法,而应该自己显式定义构造方法。

测试类,服务端创建成功

注意这里,我一开始用的单元测试,发现运行后立即停止了。用main方法就可以一直执行

cmd查看

然后弄客户端

我的目录结构

修改成对应的就可以了

接下来是在项目里使用rmi,上面教程没有实体类控制器,学习师兄们的日报

...

把之前的demo复制成两份

服务端:删掉controller层,webapp里的所有东西,增加一个main方法,用来开启端口

方式2:因为有了扫描,在实现类上指定name可以直接饮用

写个main方法,端口启动了,但是他报的错对我似乎没影响,我在网上看了也没相关的

客户端:

删除service实现类,dao层,数据源

新建一个xml

启动

这里部署两台server,把server复制一份就行了,然后改一下端口号

第二个端口号是9998

开启两台service

客户端也要多一个对应的xml

随机访问任意一台Service

我看于博韬师兄日报,他说要配置两个xml,我一直报错,最后采用庆东师兄的,在一个xml里,然后用lazy-init延迟加载,没问题了

关闭9999,启动9998,打开客户端

9999没有日志信息

9998出现日志信息

页面

断点过程

然后在linux,部署两台web服务器,通过nginx负载均衡随机访问web服务器,然后每个web服务器随机访问service

看师兄们的日报,避免踩坑,进行如下设置

war包和jar包区别

把这两台service打成jar包在linux上运行

添加打包插件

http://blog.csdn.net/defonds/article/details/43233131(参考于博韬师兄日报)

用最下面那一个

打包过程中下面疯狂刷我在pom添加的依赖,我想到之前看的成延师兄日报说把service放到服务器找不到其pom依赖(也就是jar包)的问题,它是通过mvn命令copy jar包的。我想于博韬师兄的办法更好吧

使用命令后台运行我把service打成的jar包


http://blog.csdn.net/qq_30739519/article/details/51115075

我是用的是第三种方式,这样就算关闭xshell,service也会继续执行。

开启一台service后服务器越来越卡,连不上了。重启一下


禅道:http://task.ptteng.com/zentao/task-view-15705.html


返回列表 返回列表
评论

    分享到