1、dubbo序列化
1.1、序列化、反序列化的介绍
- 序列化:把对象转换为字节序列的过程称为对象的序列化。
- 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
先来思考两个问题:
- 普通的Java对象的生命周期是仅限于一个JVM中的,只要JVM停止,这个对象也就不存在了,下次JVM启动我们还想使用这个对象怎么办呢?
- 或者我们想要把一个对象传递给另外一个JVM的时候,应该怎么做呢?
这两个问题的答案分别是:
- 将该对象进行序列化,然后保存在文件中,
- 将对象序列化后通过网络传输到另一个JVM,由另外一个JVM反序列化成一个对象,然后供JVM使用。
对象序列化就是将一个存在内存中的对象,转换为可存储或者可传输的二进制流,并且根据序列化的规则可以进行反序列化。
(一般来说需要保存的对象信息包括类的全限定名称、未被transparent修饰的字段值,将这些信息按照一定的规则转换为二进制之后进行网络传输,在接收到的一端,就可以根据这些信息先实例化这个类对应的对象,然后将对应的属性值填入新构造的对象,在使用者看来就是使用的原来的对象。)
1.2、dubbo序列化
dubbo支持很多种通信协议,其中dubbo协议作为默认的通信协议。dubbo 调用是需要跨 JVM,需要进行网络通信,这就需要使用到序列化与反序列化。
dubbo 的消费者和服务提供者之间进行传递的数据都需要进行序列化。我们有时可能看到 dubbo 的消费者和提供者使用字符串进行数据传递,好像不需要做什么序列化操作,实际上这是因为 String 类本身就已经实现了序列化接口了。所以如果传递的参数即消费者传递的参数或者提供者返回的数据是我们自己定义的一些实体类的话,我们需要对该类手动实现序列化。
dubbo 中进行序列化的方式很简单,只需该类实现 Serializable 即可。
比如消费者和提供者之间通过 User 类来进行数据传递,比如提供者方法接收一个 User 类做参数,或者提供者返回的数据是一个 User 类,则 User 类需要实现序列化。示例如下:
import java.io.Serializable; public class User implements Serializable { private String name; private int age; private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
dubbo 中消费者和提供者之间传递的数据未实现序列化的话,调用提供者的接口会直接报错。
标签:Dubbo,dubbo,对象,提供者,高级,特性,JVM,序列化,public From: https://www.cnblogs.com/wenxuehai/p/16923329.html