这是我在实习期间使用Feign遇到的两个坑,顺手便记录下来。
Feign数据量过大而导致json截断的问题 {#Feign数据量过大而导致json截断的问题}
业务要求从指定的某些接口获取数据然后解析,有一个接口不提供分页参数,导致传递的数据量非常大,从而导致json被截断,解析失败。报错大致如下:
|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5
| Suppressed: com.alibaba.fastjson.JSONException: not close json text, token : ident at com.alibaba.fastjson.parser.DefaultJSONParser.close(DefaultJSONParser.java: 1556 ) at com.alibaba.fastjson.JSONReader.close(JSONReader.java: 179 ) at com.kedacom.edu.component.course.he.service.impl.SchoolCourseServiceImpl.getCourseInfos(SchoolCourseServiceImpl.java: 137 ) ... 20 common frames omitted
|
通过日志发现是json末尾部分未闭合,后续发现服务端支持gzip,改用okhttp的feign客户端同时启用gzip压缩后解决。
Feign连接超时自动关闭的问题 {#Feign连接超时自动关闭的问题}
发现这个问题的原因是因为有几个接口获取json解析时经常空指针,刚开始没意识到,以为是场地的限流策略,于是添加线程休眠及重试机制,无果。后续把feign的 loggerLevel
设置为 full
后发现没获取到数据连接就被关闭了。解决方案:延长超时时间。
|---------------------|------------------------------------------------------------------------------------|
| 1 2 3 4 5 6
| feign: client: config: default: connectTimeout: 500000 readTimeout: 500000
|