当前位置: 首页 > news >正文

坑#Spring Cloud Gateway#DataBufferLimitException

现象

POST请求数据量大(Content-Length: 305000+)的时候Gateway报错, 报错栈如下:

org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:99)

尝试修改max-in-memory-size配置无效

原因

在Gateway配置文件routes节点中使用了CacheRequestBody

public class CacheRequestBodyGatewayFilterFactoryextends AbstractGatewayFilterFactory<CacheRequestBodyGatewayFilterFactory.Config> {private final List<HttpMessageReader<?>> messageReaders;public CacheRequestBodyGatewayFilterFactory() {super(CacheRequestBodyGatewayFilterFactory.Config.class);// 这块有问题this.messageReaders = HandlerStrategies.withDefaults().messageReaders();}
}

在这里插入图片描述

解决

方式一

参考: https://github.com/spring-cloud/spring-cloud-gateway/issues/1658

import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.cloud.gateway.filter.factory.CacheRequestBodyGatewayFilterFactory;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;@Bean
public BeanPostProcessor cacheRequestBodyGatewayFilterFactoryBeanPostProcessor() {return new BeanPostProcessor() {@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof CacheRequestBodyGatewayFilterFactory cacheFactoryBean) {// use java reflection to replace messageReaders in CacheRequestBodyGatewayFilterFactory// with message readers configured from CodecConfigurerField messageReadersField = ReflectionUtils.findField(CacheRequestBodyGatewayFilterFactory.class,"messageReaders");messageReadersField.setAccessible(true);ReflectionUtils.setField(messageReadersField, cacheFactoryBean, codecConfigurer.getReaders());messageReadersField.setAccessible(false);return cacheFactoryBean;}return bean;}};
}
方式二

参考: https://blog.csdn.net/fujiakai/article/details/134972127
重写org.springframework.core.codec.AbstractDataBufferDecoder类

  1. 在当前项目创建相同包名和类名文件
  2. 调整maxInMemorySize默认值大小即可
http://www.dtcms.com/a/574226.html

相关文章:

  • 15年做哪些网站能致富网页升级访问紧急通知狼
  • ping: baidu.com: 域名解析暂时失败
  • 上海网站设计方法有哪些网站上可以做试卷
  • 网站建设项目立项登记 表自己家的电脑宽带50m做网站服务器
  • 宜宾公司做网站建设一个电子文学网站资金多少
  • 效率提升的声音助手——工业物联网中的智能化变革
  • 普罗宇宙发布大白机器人2.0 及灵巧手,携手京东加速全球化落地
  • Java 集合框架:List 体系与实现类深度解析
  • 阿里云 ip 网站哈尔滨行业网站建设策划
  • 注册了网站怎么建设网站视听内容建设
  • 泉州专业做网站网上做网站怎么防止被骗
  • 使用 ECharts + ECharts-GL 生成 3D 环形图
  • 做电影网站视频放在那里南阳做那个网站好
  • 美德的网站建设局网站建设招标
  • 学校网站的建设论文怎么建网站做推广
  • 第四阶段通讯开发-7:TCPListener和TCPClient
  • 中国最权威的网站排名电脑网站安全证书有问题如何解决
  • 网站建设实训小结在线网站流量查询
  • 深圳网站建设自己人做1688网站到哪里找图片
  • C++ —— list
  • xv6 附录A
  • 【设计题】如何实现一个线程安全的缓存?
  • 网站透明效果wordpress广告插件中文
  • 网站建设费用进会计什么科目界面设计与制作是做什么的
  • 中小企业网站建设如何c 网站开发教程
  • 深度学习-池化层
  • ruoyi-app学习路线
  • 网站群建设意见网站建设+廊坊
  • 数据库关系模式核心概念详解:候选关键字与无损连接判断
  • 做外贸上哪些网站找客户网页设计收费标准