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

网站开发立项报告新浪体育世界杯

网站开发立项报告,新浪体育世界杯,杭州市政府网站的建设的启示,浙江建设培训考试网站目录 1、问题背景 2、分析源码过程 3、解决办法 最近在测试环境spring cloud gateway突然出现了异常,在这里记录一下,直接上干货 1、问题背景 测试环境spring cloud gateway遇到以下异常 DataBufferLimitException: Exceeded limit on max bytes t…

目录

1、问题背景

2、分析源码过程

3、解决办法


最近在测试环境spring cloud gateway突然出现了异常,在这里记录一下,直接上干货

1、问题背景

测试环境spring cloud gateway遇到以下异常

DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144(超出了缓冲区的最大字节数限制)

乍一看,问题很简单啊,通过配置加大缓存区不就行了啊,于是就在application.yml加了以下配置

#将缓存区设置为2m
spring:codec:max-in-memory-size: 2MB

可是问题又出现了,通过调试发现配置的max-in-memory-size在程序启动初始化确实是生效的。但是有业务调用的时候,此参数的接收值为null,maxInMemorySize还是读取的默认值(256K)。

那咋整,只能从源码入手了。

2、分析源码过程

通过异常日志,可以定位到异常位置

后来发现我们自定义的拦截器获取body的信息是获取方式,代码如下

因为HandlerStrategies.withDefaults() 是每次都需要重新创建对象,并非是spring注入的对象,所以每次获取的都是默认值,导致配置不生效。

3、解决办法

在我们自定的拦截器中注入ServerCodecConfigurer类,通过该类获取配置。这样获取到的就是我们在application.yml中配置的缓存区配置的字节数限制了。

具体代码:

@Component
@Slf4j
public class RequestFilter implements GlobalFilter, Ordered {@Overridepublic int getOrder() {return OrderedConstant.HIGHEST_PRECEDENCE;}//手动注入ServerCodecConfigurer@AutowiredServerCodecConfigurer codecConfigurer;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {StopWatch stopWatch = new StopWatch();stopWatch.start();long startTime = System.currentTimeMillis();try {final Log logDTO = new Log();ServerHttpRequest request = exchange.getRequest();// 设置X-Request-IdAtomicReference<String> requestId = new AtomicReference<>(GenerateIdUtils.requestIdWithUUID());Consumer<HttpHeaders> httpHeadersConsumer = httpHeaders -> {String headerRequestId = request.getHeaders().getFirst(HeaderConstant.REQUEST_ID);if (!Strings.isNullOrEmpty(headerRequestId)) {requestId.set(headerRequestId);}logDTO.setRequestId(requestId.get());httpHeaders.set(HeaderConstant.REQUEST_ID, requestId.get());httpHeaders.set(HeaderConstant.START_TIME_KEY, String.valueOf(startTime));};// codecConfigurer.getReaders()获取pplication.yml中配置的缓存区配置的字节数ServerRequest serverRequest = ServerRequest.create(exchange,codecConfigurer.getReaders());URI requestUri = request.getURI();String uriQuery = requestUri.getQuery();String url = requestUri.getPath() + (!Strings.isNullOrEmpty(uriQuery) ? "?" + uriQuery : "");HttpHeaders headers = request.getHeaders();MediaType mediaType = headers.getContentType();String method = request.getMethodValue().toUpperCase();// 原始请求体final AtomicReference<String> requestBody = new AtomicReference<>();final AtomicBoolean newBody = new AtomicBoolean(false);if (mediaType != null && LogHelper.isUploadFile(mediaType)) {requestBody.set("上传文件");} else {if (method.equals("GET")) {if (!Strings.isNullOrEmpty(uriQuery)) {requestBody.set(uriQuery);}} else {newBody.set(true);}}logDTO.setLevel(Log.LEVEL.INFO);logDTO.setRequestUrl(url);logDTO.setRequestBody(requestBody.get());logDTO.setRequestMethod(method);logDTO.setIp(IpUtils.getClientIp(request));ServerHttpRequest serverHttpRequest = exchange.getRequest().mutate().headers(httpHeadersConsumer).build();ServerWebExchange build = exchange.mutate().request(serverHttpRequest).build();return build.getSession().flatMap(webSession -> {logDTO.setSessionId(webSession.getId());if (newBody.get() && headers.getContentLength() > 0) {Mono<String> bodyToMono = serverRequest.bodyToMono(String.class);return bodyToMono.flatMap(reqBody -> {logDTO.setRequestBody(reqBody);// 重写原始请求ServerHttpRequestDecorator requestDecorator = new ServerHttpRequestDecorator(exchange.getRequest()) {@Overridepublic Flux<DataBuffer> getBody() {NettyDataBufferFactory nettyDataBufferFactory = new NettyDataBufferFactory(new UnpooledByteBufAllocator(false));DataBuffer bodyDataBuffer = nettyDataBufferFactory.wrap(reqBody.getBytes());return Flux.just(bodyDataBuffer);}};return chain.filter(exchange.mutate().request(requestDecorator).build()).then(LogHelper.doRecord(logDTO));});} else {return chain.filter(exchange).then(LogHelper.doRecord(logDTO));}});} catch (Exception e) {log.error("请求日志打印出现异常", e);return chain.filter(exchange);}}}

http://www.15wanjia.com/news/23799.html

相关文章:

  • 滁州市城市建设投资有限公司网站小说推广关键词怎么弄
  • 大学毕业网站设计代做seo全称英文怎么说
  • 深圳网站制作公司排名线上培训课程
  • 网站数据怎么更新seo对各类网站的作用
  • 寻找东莞微信网站建设宣传推广的十种方式
  • 网站开发 技术难点seo引擎优化是什么
  • 深圳建网站开发费用百度权重查询网址
  • 做网站怎样实现网上支付网站建设策划书范文
  • 做网站然后推广关键词挖掘工具爱网
  • 网站建设有哪些技术win7最好的优化软件
  • 摄影网页模板seo应该如何做
  • 网站标题 关键字网站自然排名优化
  • ps做网站尺寸长沙全网推广
  • 烟台响应式网站建设免费网络推广公司
  • 校园网站建设管理制度关键词抓取工具都有哪些
  • 雄安网站开发公司百度搜索引擎优化怎么做
  • 有源代码如何做网站网络营销策划方案书范文
  • 网页设计公司官网功能图站长seo查询工具
  • 网站建设公司专业网站科技开发编程培训机构加盟哪家好
  • 同德县wap网站建设公司活动推广方案
  • 网站为什么备案贵阳seo网站管理
  • 哪里做公司网站比较好最有效的网络推广方式
  • 做网站需要走公司吗淘宝店铺推广
  • 网站建设怎么做b站免费版入口
  • 深圳罗湖网站设计seo优化推广专员招聘
  • 青岛市崂山区城乡建设局网站竞价是什么工作
  • 东南亚网站建设市场百度指数是什么意思
  • 旅游网站建设有哪些不足上首页seo
  • 电子元器件网站怎么做seo优化宣传
  • 国外做游戏评测的视频网站有哪些厦门网络关键词排名