发表于: 2017-10-31 22:24:51
1 878
今日完成:
继续完成昨天没完成的
在Java 1.4及 以前的版本中需要手动建立Stub对象,通过运行rmic命令来生成远程对象实现类的Stub对象,但是在Java 1.5之后可以通过动态代理来完成,不再需要这个过程了。
这里服务端已开启!看下端口
在启动服务器的时候,实际上需要运行两个服务器:
一个是远程对象本身;
一个是允许客户端下载远程对象引用的注册表;
那么开启客户端调用一下!
成功,这里在调用一下Java bean对象试试看,结果报错
对于JAVA bean对象,必须满足以下条件:
必须实现java.io.Serializable接口;
其中必须有serialVersionUID字段,格式如下:
private static final long serialVersionUID = 42L;而且在服务器和客户端这个字段必须保持一致才能进行反序列化,如果没有该字段,则默认该类会随机生成一个整数,且在客户端和服务器生成的整数不相同则报错
实现方法如下
测试成功!
基础Demo 做完开始进行spring 整合 Rmi
在Spring环境使用RMI时,可以省略以下几点:
1、接口类不需要继承Remote,方法不需要抛出RemoteException异常对象。
2、实现类不需要继承UnicastRemoteObject。
3、RMI服务自动注册。
服务端核心
org.springframework.remoting.rmi.RmiServiceExporter
客户端核心,是一个代理工厂
org.springframework.remoting.rmi.RmiProxyFactoryBean
服务端使用RmiServiceExporter暴露RMI远程方法,客户端用RmiProxyFactoryBean间接调用远程方法。
启动
写客户端
测试成功!
接下来就要正式开工了!
因为已经扫描了 直接拿进行注入
服务端因为只提供数据的增删改查.
删除cotroller层,webapps下所有文件,删除spring mvc配置文件,
RMI service 剩余如下
启动端口正常
来搞服务端!
因为服务端不需要进行数据的增删改查,只需要留下Controller层 实体类 service留个接口和web各项配置
dao 数据源 映射文件 spring 核心配置文件 全部删除,很爽啊有木有!
上面已经配置好了服务端的spring 核心文件,web中别忘记注册哦!
启动tomcat 测试,结果查到了!哈哈
为了方便直接再注册一个服务端,端口为8888
启动查看端口,这时9999和8888全部打开状态
如何实现WEB随机访问任意一台service,同时又能防止任意一台挂掉不影响呢?
写了下面一种不是很方便,需要一个判断加上双重try catch
想了半天代码优化的问题 想不到 算了!
改了不少时间...体力活啊
为了区分,分开2台service
将页面 刷新3次 对应的service如下
一起请求调用2次 service 所以备胎服务器被调用1次 我们的王者服务器被调用了2次
现在关闭其中一台 测试,页面正常刷新!
王者服务器果断顶住了压力!
后面就简单了使用nginx 部署2台tomcat!
但是这里出现了问题,使用tomcat时启动后报错闪退,发现端口被占了 关闭后OK 测试如下
配置nginx
开启,访问80端口 GO!
关闭一台TOMCAT!一台SERVICE!
只剩8888端口的service和18080的tomcat
但是随之而来的又有一个问题,因为配置了2台tomcat,在nginx反向代理进入关掉的那个tomcat时,会一直处于连接等待状态,只有我手动多刷新几次让代理进入依然开启的那台tomcat时,才会有效.
问题解决,主要是proxy_connect_timeout 这个参数
这个参数是连接的超时时间。 我设置成1,表示是1秒后超时会连接到另外一台服务器。
重读nginx配置文件后重启测试,完美!
但但但问题又来了,之前启动SERVICE 都是通过IDEA的主窗口public static void main(String args[]) 来启动,那没有了IDEA怎么来启动rmi服务端呢?
因为我们是MAVEN项目,问题就来到了如何在maven项目中运行java main程序,网上教程非常的多.
首先在cmd命令窗口下进入我们的项目根目录
运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成编译。
成功创建target字节码文件
编译完成后,执行exec运行main方法。
运行成功了,但是执行完就直接结束了....... 我一直在刷新监听端口,发现该对应建立的9999端口一闪就没了
解决方案如下,新建一个Object,使用synchronized锁住当前线程,然后让object一直处于等待状态 测试下!
成功
1点了,休息!
明日计划:服务器上部署RMI 再测试下,开始task9
问题:无
收获:对Spring RMI 有了初步的学习,分布式有了个粗略的概念框架.
评论