Spring Cloud - Feign调用请求数据过大和响应时间过长的处理办法
Feign调用请求数据过大和响应时间过长的处理办法
请求过大#
在使用 Feign 进行服务间调用时,Spring 默认配置了将服务间传输的 JSON 数据进行压缩。当传输数据的大小超过一定值时(具体我也没查到底是多大),就会报如下错误:
Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)):
only regular white space (\r, \n, \t) is allowed between tokens at [Source: (PushbackInputStream); line: 1, column: 2]
这时需要更改 Feign 配置:
feign: compression: request: enabled: false response: enabled: false
这样就可以取消服务 Feign 对数据的压缩
响应时间过长#
当一个 Feign Client 的处理时间过长(默认为 2 秒)时,调用方服务会报出: ReadTimeOut 的错误。
这时可以通过编写以下配置文件解决:
import feign.Request; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; /** * feign client 配置类 * * @author Helios */ @Component public class RemoteService1Config { /** * 连接超时 */ @Value("${service.feign.connectTimeout:120000}") private long connectTimeoutMillis; /** * 数据读取超时 */ @Value("${service.feign.readTimeOut:120000}") private long readTimeoutMillis; /** * 构造自定义配置类 * * @return Options */ @Bean(name = "service1Options") public Request.Options options() { return new Request.Options(connectTimeoutMillis, TimeUnit.MILLISECONDS, readTimeoutMillis, TimeUnit.MILLISECONDS, true); } }
然后在 Feign Client 接口文件中引入这个配置:
@FeignClient(contextId = "remoteService1", value = "XXX", fallbackFactory = XXXFallbackFactory.class, configuration = RemoteService1Config.class) public interface RemoteService1 { ... }
通过这种方式配置的 Feign Client ,可以做到一个配置文件对应一个服务。还可以配合 Nacos 动态配置超时阈值。
分类:
Spring
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现