一、报错产生场景
RuoYi-Cloud OpenFeign远程调用接口异常错误,错误信息如下:
- JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens
- at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]
复制代码 二、问题产生原因
远程接口调用参数过大,凌驾当前设置的最大参数长度,部分参数被截掉,导致json字符串不完备,也就解析出问题了。
附上application-dev.yml中feign的设置
- feign:
- sentinel:
- enabled: true
- okhttp:
- enabled: true
- httpclient:
- enabled: false
- client:
- config:
- default:
- connectTimeout: 10000
- readTimeout: 10000
- compression:
- request:
- enabled: true
- min-request-size: 8192
- response:
- enabled: true
复制代码 设置说明:
- feign.sentinel.enabled: true:启用Sentinel集成。Feign会使用Sentinel举行流量控制和熔断保护。
- feign.okhttp.enabled: true:启用OkHttp作为Feign的HTTP客户端实现。Feign默认使用的是基于JDK的URLConnection,这里开启了OkHttp作为替换方案。
- feign.httpclient.enabled: false:禁用HttpClient作为Feign的HTTP客户端实现。假如不需要使用HttpClient,可以将其禁用。
- feign.client.config.default.connectTimeout: 10000:设置Feign的默认连接超时时间为10秒。连接超时是指在与远程服务创建连接时的最大等待时间。
- feign.client.config.default.readTimeout: 10000:设置Feign的默认读取超时时间为10秒。读取超时是指从远程服务读取响应数据的最大等待时间。
- feign.compression.request.enabled: true:启用哀求压缩。Feign会对哀求的数据举行压缩,以淘汰传输的数据量。
- feign.compression.request.min-request-size: 8192
:设置哀求压缩的最小哀求大小为8192字节(8KB)。
- feign.compression.response.enabled: true:启用响应压缩。Feign会对接收到的响应数据举行解压缩,以还原成原始数据。
查阅资料,定位到该异常是由于Spring Cloud Feign 哀求其他微服务时json数据被压缩导致的
三、解决方案
1、减小参数的长度(这种方案看详细场景)
2、关闭哀求数据压缩
- feign.compression.request.enabled: false
- feign.compression.response.enabled: false
复制代码 3、设置哀求压缩的最小哀求大小
- feign.compression.request.min-request-size: 8192
复制代码 也就是说只有当哀求的参数大于8192,及8kb,才会将参数举行压缩。
固然这个参数大小自界说
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |