发表于: 2017-12-06 23:49:20
1 640
今天完成的事情:
1.显示学习java RMI,做了两个demo
(1)单纯的接口,然后访问
接口就是那样的接口,实现类也是一样的实现接口的实现类。
区别在于需要继承remote来使其可以处理异常。内部是没有任何东西的,就是处理异常的作用。
然后就是最主要的一个Stub
启动服务器:
有三步:
1)绑定端口
2)实例化接口类
3)将实例绑定到服务器上
就可以运行主方法进行启动了。
如下图,打印出111-------111就表示启动了,当然也可以查看“3165”端口的进程。
最后开启客户端调用服务端的接口方法,实现输出:
这里直接采用的是测试类进行调用。
实体类中方法的返回值是“hello+name”,入参只有name。
客户端显示要实例化对象,通过绑定实例化的名字,当然一切前提都是目前都在本地。
然后利用实例化的对象调用接口方法,就可以输出我们想要的内容。
(2)调用实体类的构造方法,进行测试
上述测试,知识对RMI简单了解,如果要在项目中使用,就需要调用别的地方的对象或参数。
这里先测试java bean的。
可新建实体类,也可利用项目中的。
我新建了一个Rmi实体类,然后有id和name属性。加上构造函数。
然后一样的四样,接口,实现,服务端,客户端。
然后运行客户端出现报错:
关于序列化的错。
就是说,我在客户端调用对象以后,显示将其进行序列化操作,因为RMI是需要将数据进行传输的,所以转化为字节符的形式最安全,传到服务器以后调用对象,接口方法。最后将返回值按照原路径返回过来,给客户端。
所以是需要实体类实现序列化的。
然后在设个serialVersionUID的值,从而反序列化是不会导致有偏差。
最后打印出正确的值:
实现类里面返回的是一个实体类对象,我们根据name属性获取到对象,然后将其id获取到后打印出来,就是我们看到的1.
2.学习Spring RMI
说起spirng,就是整合,将一些参数整合到配置文件中,然后调用配置文件就行了。
Spring RMI呢,就是不需要再抛出异常了,该整合的都整合了。
还是分为两部分,服务端和客户端。核心配置文件。
(1)服务端
配置文件:
很熟悉,就是接口,实现,端口,服务端名。
将服务端的主方法的参数放过来,然后接口,实现写完后,在主方法中直接实例化这个配置文件,就可以启动服务器了。
这就是根据配置文件中提供的端口号,查看是否已经启动成功的进程。
可以看的出来,是java。OK了。
(2)客户端
配置文件:
只有两个熟悉配置,一个接口对象,还有一个就是调用服务端的URL。
然后在客户端进行调用方法:
返回的是一个加法的算式结果。
因为客户端的写的是测试方法,所以就直接写在下面了,可以很形象的看出来。
调用配置文件,服务端启动,然后客户端这边实例化服务端的对象,并调用其方法,就可以输出值了。
明天计划的事情:
讲完小课堂,也不知道可不可以结束任务八,尽力吧!
遇到的问题:
现在要对项目的service和web进行分离,那拿出去的service接口中方法怎么个写法,因为dao层有三个接口类,那方法service怎么写?
收获:
1.学习分布式的这种概念。
RMI:远程调用方法
表现为:service层和web层的分离。
最终需要RMI的作用是在于优化业务逻辑层的代码。可以是程序在调用接口方法是的响应速度提高。
那这和以前遇到的负载均衡是有相同目的的。我可以利用nginx配置多个web服务器,然后每个服务器下都将分离出去的service层放进去,这样可以达到高并发的效果。
就是说给同一个业务配置多个服务器,这样本来1s中只能访问10次的,配置2个服务器,就可以访问20次了。这就是集群。
那我一个业务里面包含增删改查,按代码运行的顺序来说,肯定很影响访问DB的时间,所以可不可以将这些子业务分开来,然后进行配置呢。
这就是分布式的概念:
将业务的子业务分配在不同的服务器上,这样可以达到一个时间里面同时做很多业务的事。
2.Stub(存根)和Skeleton(骨架)
评论