Spring Cloud Gateway报Exceeded limit on max bytes to buffer错误如何解决
问题原因
你之前配置的全局WebFlux codec内存限制(包括yml的spring.codec.max-in-memory-size和WebFluxConfigurer的全局配置),仅作用于普通WebFlux请求处理链路,无法覆盖Spring Cloud Gateway内置的ModifyRequestBodyGatewayFilterFactory的独立配置。该过滤器默认的内存缓冲上限为256KB(即报错提示的262144字节),会优先使用自身的配置值。
解决方案
方案1:直接修改你当前代码里的过滤器配置
你在代码中手动创建ModifyRequestBodyGatewayFilterFactory.Config实例时,额外设置inMemorySize参数即可,修改后的代码片段如下:
ModifyRequestBodyGatewayFilterFactory.Config modifyRequestConfig = new ModifyRequestBodyGatewayFilterFactory.Config() // 新增这一行,设置为16MB,可按需调整大小 .setInMemorySize(16 * 1024 * 1024) .setRewriteFunction(String.class, String.class, (exchange1, originalRequestBody) -> { String modifiedRequestBody = util.modifyRequestBody(originalRequestBody,uniqueID,logid); return Mono.just(modifiedRequestBody); });
方案2:配置文件声明过滤器时使用
如果你是在yml配置文件中声明该过滤器,直接添加inMemorySize参数即可:
spring: cloud: gateway: routes: - id: modify_request_route uri: 你的目标服务地址 predicates: - Path=/FileTransfer filters: - name: ModifyRequestBody args: inMemorySize: 16777216 # 16MB,单位为字节 # 其他RewriteFunction相关配置
版本说明
你当前使用的Spring Cloud 2020.0.3版本(对应Spring Cloud Gateway 3.0.3)已经支持上述inMemorySize配置参数,无需升级版本即可生效。
额外优化建议
你当前代码中直接new ModifyRequestBodyGatewayFilterFactory()的方式不推荐,建议将Spring容器中已初始化的ModifyRequestBodyGatewayFilterFactory实例注入到你的自定义过滤器中使用,避免实例属性缺失导致的异常。
内容的提问来源于stack exchange,提问作者Mohamed
相关产品推荐
相关产品推荐

