首页 > 其他分享 >dubbo 序列化-kryo

dubbo 序列化-kryo

时间:2025-01-01 21:26:22浏览次数:3  
标签:dubbo 配置文件 kryo commons io 序列化

dubbo 序列化-kryo

在 dubbo 中给我们提供了多种的序列化的方式

  • fastjson2,hessian2
  • kryo
  • fst
  • dubbo(dubbo 官方自己的,目前没有稳定版本不推荐使用)
  • protobuf

这些都是目前比较主流的序列化方案,其中 kryo 的序列化效果是比较明显的相对于 hessian2,如果使用的是异构语言的话可以选择使用 google 提供的序列化方案 protobuf 来作为我们的序列化,这篇主要是讲解的是使用 kryo 这种序列化方案,第一步就是初始化项目引入依赖

初始化项目

直接创建一个 empty 的 meavn 工程就行

版本信息

  • JDK 23
  • dubbo 3.2.*

引入依赖

这里的序列化提供的扩展包都提供了一个 commons-io 的依赖在 idea 中提示有风险我这边移除并且增加了 idea 建议使用的版本作为当前项目的依赖

<!-- kryo -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-serialization-kryo</artifactId>
    <version>2.7.23</version>
    <exclusions>
        <exclusion>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </exclusion>
        
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>

        <!-- 重复引入了 dubbo common 的依赖,dubbo 的引入为主,如果不 exclusion 就会报错 -->
        <exclusion>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-common</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.14.0</version>
</dependency>

配置文件

这里制作简单的测试,所以我就直接使用了 spring-context 的提供的 xml 配置方式来直接启动

服务端配置文件

这里只需要制定我们需要的序列化方式在协议中,然后配置我们的 dubbot server交给 spring 容器就可以了

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="dubbo-rpc-serialization-kryo-provider" />

    <!-- protocol -->
    <dubbo:protocol name="dubbo" serialization="kryo" port="20880" />

    <!-- dubbo-service -->
    <bean id="helloService" class="com.rpc.dubbo.provider.service.HelloServiceImpl" />
    <dubbo:service interface="com.rpc.dubbo.service.HelloService" ref="helloService" />
</beans>

客户端配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="dubbo-rpc-serialization-kryo-consumer">
        <dubbo:parameter key="qos.enable" value="false" />
    </dubbo:application>

    <dubbo:protocol name="dubbo" serialization="kryo" port="-1" />

    <dubbo:reference interface="com.rpc.dubbo.service.HelloService" id="helloService" url="dubbo://172.29.32.1:20880/com.rpc.dubbo.service.HelloService?serialization=kryo" />
</beans>

启动 & 测试效果

指定我们的配置文件在启动 spring 容器阻塞不停止 main 线程保证可以给 consumer 提供服务即可

final ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(applicationXmlConfig);
ctx.start();
new CountDownLatch(1).await();

可能存在的问题

如果是高版本的 jdk 这里可能会存在 exception 不过也不会影响结果,在启动的时候添加 vm 参数就行

--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED

标签:dubbo,配置文件,kryo,commons,io,序列化
From: https://blog.csdn.net/qq_39116472/article/details/144863296

相关文章

  • 反序列化【个人学习笔记】
    改文章仅为学习过程中的笔记,如有侵权,请联系本文作者删除,谢谢......
  • 基于 Go 语言的结构体序列化与反序列化实现
    背景在软件开发中,序列化和反序列化是常见的操作,尤其是在网络通信、数据存储以及分布式系统中。序列化是指将数据结构或对象转化为字节流的过程,而反序列化则是将字节流还原为原始的数据结构或对象。通过这种方式,可以方便地在不同的系统或组件之间传输和存储数据。在Go语言中,虽......
  • .NET 9 New features-JSON序列化
    .NET9已经发布有一段时间了,近期整理一下.NET9的新特性,今天重点分享.NET9JSON序列化方面的改进。先引用官方的说明:在 System.Text.Json 中,.NET9提供了用于序列化JSON的新选项和新的单一实例,可以更轻松地使用Web默认值进行序列化。举个实际的例子,缩进选项JsonSer......
  • fastjson 序列化踩坑
    坑1:包含转义符的子对象反序列化场景这样一个json字符串[{"value":"定位标志:0,GPS:9,POWER:1,GSM:15","name":"positionType","metadata":"{\"timestamp\":1735119664668}"}]这个json字符串是如何产生的?met......
  • 序列化 FlatBuffers & protobuf
    序列化FlatBuffers&protobuf1.FlatBuffers源码:FlatBuffers指南:FlatBuffersProgrammer’sGuide结构定义文件为.fbs,注释使用//,可以使用include"my.fbs"嵌套包含文件可以理解为轻量级的protobuf,不会依赖library,但是编码会复杂一些FlatBuffers的特点是先构造......
  • java JSONObject序列化包含Date类型数据的Java对象
    javaJSONObject序列化包含Date类型数据的Java对象|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|------......
  • UE4.27, 揣摩源码, 序列化 (四) 应用
    4.runtime-UObject正反序列化4.1UObject序列化//toolload FAssetToolsModule&AssetToolsModule=FModuleManager::Get().LoadModuleChecked<FAssetToolsModule>("AssetTools"); //pathsolve FStringAssetName,Pack......
  • UE4.27, 揣摩源码, 序列化 (三) FLinkerLoad, FLinkerSave
    3.  FLinkerLoad,FLinkerSave分别是UObject的反序列化和序列化的内核3.0.UPackage与UObjectUObject因为涉及与其他UObject的复杂引用关系,如果我们客制化地单独正反序列化每一个UObject,我们会在反序列化的时候惊觉这是繁琐而不可能的。为了满足UObject......
  • JSON字符串反序列化 动态泛型
    需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成JSON字符串,然后JSON反序列化成对象,然后反射调用目标方法时这样的:CommandRespsendXXX(BaseCommandApiDTO<XXX>baseCommandApiDTO);方式一:FastJsonClassmainBody=Class.forName(entity.ge......
  • DRF之序列化器【3】数据校验
    目录前言1.基本校验2.内置和正则校验3.钩子校验4.Model校验5.保存数据之普通字段6.保存数据之FK和M2M字段7.数据校验总结总结前言在前两篇文章我们已经介绍了序列化器的序列化数据的功能以及源码实现,本文将接着介绍它的数据校验功能以及数据保存。序列化器......