解决Dubbo在反序列化时报错

本文讲述了Dubbo在反序列化时遇到的IOException,原因在于类检查机制默认为STRICT,禁止了未在白名单内的类。提供了将检查模式改为WARN或DISABLE以及如何添加类到白名单的解决方案。

服务在反序列化时报错:java.io.IOException: org.apache.dubbo.common.serialize.SerializationException: java.lang.IllegalArgumentException: [Serialization Security] Serialized class [类名] is not in allow list. Current mode is STRICT, will disallow to deserialize it by default. Please add it into security/serialize.allowlist or follow FAQ to configure it.
参考官网关于类检查机制的说明
dubbo类检查机制
我使用的版本默认的检查模式为STRICT,禁止反序列化所有不在允许序列化列表(白名单)中的类。
共有三个模式:STRICT 严格检查,WARN 告警,DISABLE 禁用

解决方法

有两种解决方法

  1. 将检查模式改为较为宽松的级别:可以通过配置dubbo.application.serialize-check-status=WARN或者dubbo.application.serialize-check-status=DISABLE
  2. 将要反序列化的类加入到白名单:在资源目录(resource)下定义security/serialize.allowlist文件,并将类的全名写入:
# security/serialize.allowlist
io.dubbo.test
### 关于 Dubbo 框架错误码 99-0 的分析 Dubbo 是一个高性能的 Java 分布式服务框架,广泛应用于微服务架构中。然而,在实际使用过程中可能会遇到各种异常情况,其中 `error code 99-0` 是一种常见的运行错误。 #### 错误描述 根据已知的信息以及社区反馈,`error code 99-0` 通常表示客户端发送了一个请求到服务器端,但由于某些原因未能成功处理该请求并返回结果。具体表现为: 1. **超问题**:如果消费者等待提供者响应的间超过了配置的最大超间,则会触发此错误[^1]。 2. **网络连接中断**:当网络不稳定或者突然断开也可能引发此类错误[^2]。 3. **序列化/反序列化失败**:在传输对象的过程中发生编码或解码错误也会导致类似的错误提示[^3]。 #### 解决方案 针对以上可能的原因可以采取以下措施来排查和解决问题: ##### 配置合理的超设置 确保 Consumer 和 Provider 双方都设置了恰当的服务调用超长参数(如 timeout),并且这个值应该基于业务需求合理调整而不是简单地增大它直到不再抛出异常为止;同还需要注意的是不同版本之间可能存在默认行为差异所以最好显式指定这些属性以免意外情况发生[^1]。 ```properties dubbo.consumer.timeout=5000 # 单位毫秒,默认为一分钟即60*1000ms ``` ##### 加强网络稳定性保障机制 通过引入心跳检测功能定期验证链路状态从而及发现潜在隐患并作出相应补偿动作比如重新建立链接等操作以减少因短暂失联造成的负面影响[^2]。 另外还可以考虑部署高可用集群模式进一步提升系统的健壮性和容灾能力防止单点故障影响整体性能表现。 ##### 处理好自定义POJO类中的字段类型兼容性问题 由于双方使用的JDK版本或者其他依赖库存在细微差别可能导致即使表面上看起来相同的Java Bean实际上并不完全一致进而引起无法正常完成消息转换过程的情况因此建议开发者仔细核对自己项目里涉及到远程通信的所有实体结构确保它们能够在任意环境下都能被正确解析出来而不会因为缺少某个getter/setter方法或者是父类继承关系改变等因素干扰正常的流程执行路径[^3]. 最后提醒一点就是每当修改了任何一方的相关定义之后都需要同步更新另一侧对应的实现部分这样才能保持一致性避免不必要的麻烦出现. --- ### 示例代码片段展示如何捕获并记录特定类型的异常以便后续诊断分析工作开展更加顺利高效: ```java try { // 正常业务逻辑调用... } catch (RemotingException e) { if ("99-0".equals(e.getCode())) { log.error("Detected ErrorCode 99-0 during invocation.", e); // 自定义重试策略或其他补救措施... } } ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值