文章目录

  • 前言
  • 为什么用 kryo 做序列化?
  • 怎么使用 Kryo?
    • 1. 引入 Kryo 依赖
    • 2. 增加配置
    • 3. 其他代码
    • 4. 如果增加了自己的序列化类,怎么做?
      • 4.1 需要被序列化的实体
      • 4.2 序列化类的实现
      • 4.3 使用
    • 5. 结果

前言

本文大部分参考官方文档:https://dubbo.apache.org/zh/docsv2.7/user/serialization/

代码部分,是本人自己写的案例中增加配置得到的。因此,写个原创不过分吧。

为什么用 kryo 做序列化?

众所周知,在 RPC 框架中,最最重要,也是最影响性能的地方是序列化和传输协议。
那么对于 Dubbo 而言,本身默认使用的序列化 hessian2 其实也挺好的了。
但还是美中不足。与 Kryo相比,Kryo 的体积更小,而且官方的测试结果也显示, Kryo 更快。也是官方更加推荐使用的。

怎么使用 Kryo?

1. 引入 Kryo 依赖

在你的 springboot 项目中,首先引入 kryo 的 maven 依赖(版本你自己看着办,不一定非要和我用一样的):

        <!-- 添加序列化依赖 --><dependency><groupId>de.javakaffee</groupId><artifactId>kryo-serializers</artifactId><version>0.42</version></dependency>

2. 增加配置

我这里使用的是属性文件配置:

# 指定使用看 Kryo 做序列化
dubbo.protocol.serialization=kryo
# 自己实现注册(也可以不加)
#dubbo.protocol.optimizer=org.feng.kryo.SerializationOptimizerImpl

3. 其他代码

我是在这个demo的基础上加的:
https://blog.csdn.net/FBB360JAVA/article/details/120847768

4. 如果增加了自己的序列化类,怎么做?

4.1 需要被序列化的实体

package org.feng.entity;import java.io.Serializable;public class MyBean implements Serializable {private static final long serialVersionUID = 9209554053837563785L;private String name;private String body;public MyBean() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}@Overridepublic String toString() {return "MyBean{" +"name='" + name + '\'' +", body='" + body + '\'' +'}';}
}

4.2 序列化类的实现


package org.feng.kryo;import org.apache.dubbo.common.serialize.support.SerializationOptimizer;
import org.feng.entity.MyBean;import java.util.Collection;
import java.util.LinkedList;
import java.util.List;public class SerializationOptimizerImpl implements SerializationOptimizer {@Overridepublic Collection<Class<?>> getSerializableClasses() {List<Class<?>> classes = new LinkedList<>();// 将自己的bean注册进去classes.add(MyBean.class);return classes;}
}

4.3 使用

在配置中指定这个实现类即可。

5. 结果

The URL[dubbo://172.173.173.69:20880/org.feng.service.DemoStartService?anyhost=true&application=springboot-dubbo-nacos-provider-mytest&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=org.feng.service.DemoStartService&metadata-type=remote&methods=print,sayName&pid=29784&release=2.7.8&revision=1.0.0&serialization=kryo&side=provider&timestamp=1635152781434&version=1.0.0] deregistered successfully., dubbo version: 2.7.8, current host: 172.173.173.69

可以看到,在控制台的日志中,显示使用了 kryo。

Dubbo 使用 kryo 序列化相关推荐

  1. java kryo 序列化_java中的序列化方式及dubbo使用kryo序列化

    java中的序列化方式: 1. 自带序列化  ObjectInputSteam. ObjectOutStream等 2. hession2 3. json ,xml等格式 4.kryo 5.FST - ...

  2. dubbo kryo序列化_为什么如此高效?解密kryo各个数据类型的序列化编码机制,强...

    用过dubbo的开发人员,在替换序列化时都会根据"经验"来选kryo为序列化框架,其原因是序列化协议非常高效,超过java原生序列化协议,hessian2协议,那kryo为什么高效 ...

  3. avro和java原生序列化的区别,java原生序列化和Kryo序列化性能比较

    简介 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对Java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf,Thrift, ...

  4. 【java】java原生序列化和Kryo序列化性能实例对比分析

    1.美图 2.概述 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对Java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf, ...

  5. krait和kryo_java原生序列化和Kryo序列化性能比较

    简介 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对Java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf,Thrift, ...

  6. krait和kryo_java原生序列化和Kryo序列化性能实例对比分析

    简介 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf,Thrift, ...

  7. 在Spark中自定义Kryo序列化输入输出API(转)

    原文链接:在Spark中自定义Kryo序列化输入输出API 在Spark中内置支持两种系列化格式:(1).Java serialization:(2).Kryo serialization.在默认情况 ...

  8. Kryo序列化实现源码分析

    在使用Kryo序列化之前需要将被序列化的类通过register()方法注册到其中去. 在register的过程中,实则是要根据要序列化的类生成对应的Registration,Registration中 ...

  9. 【Spark】Spark的Kryo序列化

    1.美图 2.Spark序列化概述 在Spark的架构中,在网络中传递的或者缓存在内存.硬盘中的对象需要进行序列化操作,序列化的作用主要是利用时间换空间: 分发给Executor上的Task 需要缓存 ...

  10. Netty使用kryo序列化传输对象

    Netty使用kryo序列化传输对象 横渡 Netty使用kryo序列化传输对象 - 简书参考文章:https://blog.csdn.net/eguid_1/article/details/7931 ...

最新文章

  1. 世界杯规则终因IT而改变
  2. Linux - SVN下载项目
  3. centOS防火墙中端口的开启和关闭
  4. win8桌面壁纸路径
  5. 挖掘 OSINT 金矿——实习生和社交媒体
  6. boost::mpl::divides相关的测试程序
  7. MyBatis在Oracle中插入数据并返回主键的问题解决
  8. web页面找不到资源文件,报404,但是资源文件存在且路径没错
  9. Vue.js - Day2
  10. #define 与 typedef
  11. 数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”
  12. 中电信总工:我国将在2011底出现IP短缺
  13. X264码率控制总结——ABR,CQP,CRF
  14. Vue中router-link路由跳转以及传参方式
  15. linux系统halt,Linux命令之halt - 停止系统运行但不关闭电源
  16. 妙味课堂:JavaScript初级--第11课:字符串、查找高亮显示
  17. Leetcode466.统计重复个数——掐头去尾寻找循环点
  18. 论文精读:GHM:Gradient Harmonized Single-stage Detector
  19. 走Java道路怎么样,如何学习
  20. 无聊到能吓死一湾人的鬼畜代码

热门文章

  1. su   sudo 命令
  2. 关于手机使用中信号强弱 网速快慢 频段的相关常识
  3. Apache Axis2项目的联合创始人总结30条架构原则
  4. 传递给Appium服务器以开启相应安卓Automation会话的Capabilities的几点说明
  5. vue图片时间轴滑动_响应式垂直时间轴组件– vuetimeline
  6. 计算机工程制图箭头怎么画,cad中箭头画法
  7. 苹果iPhone手机怎么恢复备份?详细iOS备份怎么恢复教程
  8. LOJ #2155. 「POI2011 R1」同谋者 Conspiracy(深入性质分析)
  9. bilibili直播 斗鱼直播等直播工具黑屏怎么办?
  10. pip安装报错:There was a problem confirming the ssl certificate