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