Feign接收超大Json与超时关闭

这是我在实习期间使用Feign遇到的两个坑,顺手便记录下来。

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连接超时自动关闭的问题

发现这个问题的原因是因为有几个接口获取json解析时经常空指针,刚开始没意识到,以为是场地的限流策略,于是添加线程休眠及重试机制,无果。后续把feign的loggerLevel设置为full后发现没获取到数据连接就被关闭了。解决方案:延长超时时间。

1
2
3
4
5
6
feign:
client:
config:
default:
connectTimeout: 500000
readTimeout: 500000