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 动态配置超时阈值。

posted @   Helios_Fz  阅读(5107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
主题色彩