发表于: 2021-04-21 23:51:48
1 1278
深度思考
任务9
以下
报错原因,连接服务器的账号错了。。。。
服务器运行:
启动ServiceA:java -jar ServiceA-1.0-SNAPSHOT.jar &
关闭一台服务器:
因为spring-RMI框架解决了java-RMI许多问题:
1.spring-rmi解决了java-rmi繁琐的实现流程。
2.原本的java-rmi实现每个方法的时候,都要抛出java.rmi.RemoteException异常,而现在只用在spring配置文件进行配置就行了
来进行判断。
3.RMI的简单介绍
RMI用于不同的java虚拟机之间的方法调用,这些虚拟机可以在同一台主机上,也可以在不同主机上。这样做的好处,避免重复造轮子。而且可以把访问量的服务对立出去,做成分布式架构。缺点:无法穿透防火墙;rmi是基于Java的,所以客户端和服务端都必须用Java开发。而且RMI采用了java的序列化机制,所以必须保证在调用rmi的时候两端Java的版本相同。
RMI:RMI是一个java框架,RMI是对RPC的实现
RPC是网络服务协议,与操作系统和语言无关。基于RPC的有很多框架,Hessian、CXF、Dubbo、Dubbox、Spring Cloud、gRPC、thrift等技术实现,都可以进行远程调用
可以,同一层禁止互相调用,应该由Controller来调用Service
一般包含业务逻辑
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次,和本地调用之间的时间相差多少?
我的测试结果太拉跨了,耗时都很长,觉得没有可比性。。。
评论