发表于: 2021-04-21 23:51:48

1 1278


今天完成的事情:
部署两台WEB,通过Nginx配置两台WEB随机访问,两台WEB可以随机访问两台Service

深度思考



明天计划的事情:

任务9



遇到的问题:

以下



收获:

报错原因,连接服务器的账号错了。。。。



本地运行成功:
启动两台Service:
A:


B:关闭之后,日志一部分内容变成二进制,怀疑是图片变成二进制传输。这个污染了日志,需要关闭它 。。。



启动tomcat,运行成功:


成功登录:




关闭ServiceB服务:




转到了ServiceA:




============
============

服务器运行:


启动ServiceA:java -jar ServiceA-1.0-SNAPSHOT.jar & 



启动ServiceB:java -jar ServiceB-1.0-SNAPSHOT.jar



启动tomcat和tomcat2,nginx



运行成功:




关闭ServiceB,依旧登录成功





关闭一台服务器:




还是运行成功:





============
============
深度思考:
1.什么是rmi?为什么要使用rmi框架?
RMI(全称是Remote Method Invocation-远程方法调用),能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法。

因为spring-RMI框架解决了java-RMI许多问题:


1.spring-rmi解决了java-rmi繁琐的实现流程。


2.原本的java-rmi实现每个方法的时候,都要抛出java.rmi.RemoteException异常,而现在只用在spring配置文件进行配置就行了




2.部署两台Service,如何在WEB中随机访问任意一台Service?
根据
int count=new Random().nextInt(2);
if(count == 0){
}
}else if(count == 1){
}

来进行判断。



3.RMI的简单介绍


RMI用于不同的java虚拟机之间的方法调用,这些虚拟机可以在同一台主机上,也可以在不同主机上。这样做的好处,避免重复造轮子。而且可以把访问量的服务对立出去,做成分布式架构。缺点:无法穿透防火墙;rmi是基于Java的,所以客户端和服务端都必须用Java开发。而且RMI采用了java的序列化机制,所以必须保证在调用rmi的时候两端Java的版本相同。



4.什么是RMI,什么是RPC,两者之间的区别是什么?
RPC:对远程方法调用就像调用本地方法那样完成;实现过程有很多框架

RMI:RMI是一个java框架,RMI是对RPC的实现



RMI只用于Java;

RPC是网络服务协议,与操作系统和语言无关。基于RPC的有很多框架,Hessian、CXF、Dubbo、Dubbox、Spring Cloud、gRPC、thrift等技术实现,都可以进行远程调用



5.Service和Service之间可以互相调用吗?是应该统一Controller调用Service,还是应该Service调用Service?

可以,同一层禁止互相调用,应该由Controller来调用Service



6.Service对外暴露的接口粒度应该是怎么样的,是只提供基础的CRUD服务,还是应该将业务逻辑包含进去?

一般包含业务逻辑



7.Thrift,Protobuffer分别是什么,一般用于什么场景?

thrift是Facebook公布的一款开源跨语言的RPC框架,有这么RPC框架,看来远程过程调用很常用啊。thrift的跨语言特型,从而可以实现跨平台。



Protobuf全称:Google Protocol Buffer,是Google开源的一种轻便高效的结构化数据存储格式,可以用于结构化数据的串行化,也称作序列化主要用于数据存储或是RPC数据交换,比较类似于XML,JSON;具有更快、更简单、更轻量级等特性。支持多种语言,只需定义好数据结构,利用Protobuf框架生成源代码,就可很轻松地实现数据结构的序列化和反序列化。



8.什么是序列化和反序列化,在RMI中是否要实现 Serializable 接口, serialVersionUID的用处是什么?


序列化和反序列化目的是在传输数据过程中,保证输入输出的结构一样。转换成二进制(字节序列)进行传输的过程。


需要实现Serializable 接口


serialVersionUID 是 Java 为每个序列化类产生的版本标识,可用来保证在反序列时,发送方发送的和接受方接收的是可兼容的对象。如果接收方接收的类的 serialVersionUID 与发送方发送的 serialVersionUID 不一致,进行反序列时会抛出 InvalidClassException。



9.Controller通过RMI调用服务是否有延迟?10条Long型的ID循环调用1000次,和本地调用之间的时间相差多少?


我的测试结果太拉跨了,耗时都很长,觉得没有可比性。。。








返回列表 返回列表
评论

    分享到