首页 > 其他分享 >Dubbo的高级特性

Dubbo的高级特性

时间:2022-11-24 21:16:47浏览次数:43  
标签:Dubbo dubbo 对象 提供者 高级 特性 JVM 序列化 public

1、dubbo序列化

1.1、序列化、反序列化的介绍

  • 序列化:把对象转换为字节序列的过程称为对象的序列化。
  • 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

 

先来思考两个问题:

  1. 普通的Java对象的生命周期是仅限于一个JVM中的,只要JVM停止,这个对象也就不存在了,下次JVM启动我们还想使用这个对象怎么办呢?
  2. 或者我们想要把一个对象传递给另外一个JVM的时候,应该怎么做呢?

这两个问题的答案分别是:

  1. 将该对象进行序列化,然后保存在文件中,
  2. 将对象序列化后通过网络传输到另一个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

相关文章

  • Dubbo源码-04-SPI
    一DubboSPI核心核心实现都在ExtensionLoader中,比较重要的3个入口方法分别是ExtensionLoader#getExtensionLoader()扩展实现的加载器ExtensionLoader#getDefaultExte......
  • 【爬虫】 requests高级用法,代理池,爬取视频和新闻
    目录1.测试频率2.requests高级用法2.1ssl认证2.2实例2.3使用代理2.4超时设置2.5异常处理2.6上传文件3.代理池搭建3.1django后端获取客户端的ip4.爬取某视频网站......
  • python,requests高级用法,爬虫代理池,BautifulSoup4介绍
    requests高级用法ssl认证使用代理超时设置异常处理上传文件代理池搭建django后端获取客户端的ip爬取某视频网站爬取新闻BautifulSoup......
  • MySQL8.0新特性—CTE
    MySQL8支持公用表表达式,包括非递归和递归两种。公用表表达式允许使用命名的临时结果集,这是通过允许在SELECT语句和某些其他语句前面使用WITH子句来实现的。不能在同一查......
  • 反射和特性
    反射一个运行的程序查看本身的元数据或者其他程序集的元数据的行为叫做反射。元数据,就是描述数据的数据。Metadata存在于任何对数据和数据关系的描述中,NET是基于面......
  • postgresql 14新特性
    再说PostgreSQL14之前,先来带大家回复一下之前发布的各个版本和特性。PostgreSQL9.0:支持64位windows系统,异步流数据复制、HotStandby;PostgreSQL9.1:支持数据同步复制......
  • 记录一些JDK的新特性~持续更新
    1、record快速定义类@TestpublicvoidtestRecord(){/***JDK16新特性**@paramstart*@paramend......
  • Java帝国的诞生、Java的特性、Java的版本
    Java帝国的诞生C&C++1972年C诞生贴近硬件、运行极快、效率极高操作系统,编译器,数据库,网络系统等指针和内存管理1982年C++诞生面向对象兼容C图形领域、游戏等J......
  • java8新特性
    什么是函数式(Functional)接口只包含一个抽象方法的接口,称为函数式接口。你可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常(即:非运行时异常),那么......
  • 第十五章 k8s高级篇-中间件容器化机Helm
    第十五章k8s高级篇-中间件容器化机Helm目录第十五章k8s高级篇-中间件容器化机Helm1,容器中间件说明2,部署应用至k8s通用步骤3,部署单实例中间件至k8s4,k8s中间件的访问模式......