新闻详情

新闻详情

首页 / 资讯中心 / 详情

java feign调用第三方服务出现序列化错误的排查过程

发布时间:2026/9/2 19:17:06来源:尧图网络
java feign调用第三方服务出现序列化错误的排查过程
一、背景java服务调用另一个java服务的接口大多是通过服务注册中心使用java feign client 去调用http接口。写法如下其本质是一个http请求入参和返回值会自动序列化。本文分享一个因为序列化失败而报错的排查案例。二、报错{“traceId”:null,“code”:10500724010,“msg”:“获取资源详情异常DataCenterServiceClient#findPersonResourceByUserIdV4(Long,String,Boolean,Boolean,String,Integer,Integer,Boolean,Integer,Integer,Integer,String) failed and no fallback available.”,“description”:null,“errors”:null}第一反应是对方的服务挂了所以feign调用出错。但是部分用户调用失败注意是部分。当我们拿到报错用户的账户进行登录该错误在本地复现了也就是说这个错误是必现的。所以我们得出的结论是脏数据导致查询报错。但是问题来了凡事就怕但是怎么个脏数据呢三、第一次调试过程因为之前的程序写法调用别的java服务接口前并不会打印请求入参特别是查询类的接口。一般地如果是操作类的接口我们要求程序应该输出请求和返回日志。所以因为只有生产环境的数据能够复现所以我们部署了一套灰度环境。其次在调用外部服务的接口前增加了打印日志输出请求参数的内容。示例有了请求值就可以手动调用三方服务的接口。出乎外料之外的是手动调用三方服务的接口返回正常并不报错。所以我们必须打印feign调用的返回值。于是我们继续排查。。。四、打开feign调用的日志1、FeignConfig建议所有的spring boot程序框架都实例化该类。// 配置 Feign 日志级别ConfigurationpublicclassFeignConfig{BeanLogger.LevelfeignLoggerLevel(){// 可选NONE, BASIC, HEADERS, FULLreturnLogger.Level.FULL;}}2、配置# application.yml# 日志级别设为 DEBUG 或 FULLlogging: level:# 你的 Feign Client 接口全限定名com.xxx.xxx.client.DataCenterServiceClient: debug如此便能得到这个类下的所有方法的出入参信息。原来feign调用报错了是一个内部错误feign.codec.DecodeException难怪被吞掉了打印异常的时候只能看到failed and no fallback available五、解决问题通过feign调用日志我们得知是其中的字段fileLength长度越界了。对方是Long类型定义的一个字段而我们接收方却定义为Integer。1、三方服务的接口返回值定义2、接收方的返回值定义于是乎出现了数据越界的错误feign调用的时候反序列化出错。六、总结本文通过打印feignClient调用的出入参信息得以知晓反序列化出错导致接口调用报错。也提醒我们feign调用的日志输出对于解决线上程序报错的重要性程序应该默认实例化Logger.Level其次因为feign调用的日志输出量非常大平常是关闭状态等到要跟踪生产的问题将排得上用场。最后定义字段的时候整型还是长整型真的是个坑。测试也很难看出来所以在生产进行测试的时候不要只以自己的数据为测试结果。所以用户上线后选取部分典型数据进行灰度测试非常必要。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

d3dcompiler_37.dll 缺失怎么修复?补齐 DirectX 旧版组件并检查运行库 2026/9/3 1:10:10

d3dcompiler_37.dll 缺失怎么修复?补齐 DirectX 旧版组件并检查运行库

旧版游戏或图形软件在启动阶段弹出 d3dcompiler_37.dll 缺失,通常并不代表这个文件本身损坏,而是 DirectX 早期并行组件没有完整安装。直接从网上下载单个 DLL 丢进游戏目录,可能暂时消除报错,但文件的版本、位数和来源都存在不确…

阅读更多 →
Python新手入门:从在线练习到本地开发环境搭建 2026/9/3 1:10:10

Python新手入门:从在线练习到本地开发环境搭建

在大一第一堂专业导论课上,导员没有先讲培养方案,而是打开了一个网站。他说,学编程别急着装一堆软件,先在网页里试,试出兴趣再决定要不要深入。那节课之后,我才第一次知道 Python 在浏览器里就能直接运行&a…

阅读更多 →
Win11提示d3dcompiler_35.dll缺失怎么修复?先修DirectX历史组件再开老游戏 2026/9/3 1:10:10

Win11提示d3dcompiler_35.dll缺失怎么修复?先修DirectX历史组件再开老游戏

在 Win11 上打开老游戏或旧版图形工具时,常会遇到“d3dcompiler_35.dll 缺失,请重新安装程序”的提示。这个文件属于 DirectX 历史运行库里的着色器编译组件,不是普通应用文件。只从网上找一个 DLL 放回系统目录,往往修不干净&…

阅读更多 →
Android社团管理App开发全解析:从SQLite数据库设计到功能实现 2026/9/3 1:10:10

Android社团管理App开发全解析:从SQLite数据库设计到功能实现

简介:这是一套面向计算机相关专业本科生的高完成度毕业设计项目,聚焦高校社团管理场景,提供从Android客户端到SQL数据库的完整移动应用解决方案,适用于毕设开发、课程设计及Android数据库综合实训。资源包共765个文件,…

阅读更多 →
msvcp140.dll丢失怎么修复?先补VC++运行库再检查软件完整性 2026/9/3 1:10:10

msvcp140.dll丢失怎么修复?先补VC++运行库再检查软件完整性

运行软件、游戏或安装包时,如果 Windows 弹窗提示“计算机中丢失 msvcp140.dll”,很多人会先想到去网上找一个同名文件。其实这个报错更多是 Visual C 运行库组件异常引起的。先把 VC 运行库和系统 DLL 补好,再检查触发报错的软件&#xff0c…

阅读更多 →
MapChangeListener 源码深度解析:键值对变化的精准观察者 2026/9/3 1:07:09

MapChangeListener 源码深度解析:键值对变化的精准观察者

在深入剖析了 ListChangeListener 之后,我们迎来了 JavaFX 集合框架中的另一位重要成员:MapChangeListener<K, V>。它是 ObservableMap 的专属监听器,负责精确报告 Map 中每一次键值对的插入、更新和删除操作。 MapChangeListener 的设计与 ListChangeListener 有着本…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞