Spring Cloud Zuul网关怎么修改为短连接(cloud,spring,zuul,开发技术)

时间:2024-05-05 15:43:57 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、问题分析

之前在用zuul网关的时候,请求几次然后连接就断开了。原因是因为http1.1之后,默认走的都是connection=keep-alive 长连接。但没有心跳维持,顾1分钟断开一次。但RestFul一般都是走短连接就行了。因此想着只要修改头部connection属性就行了.

就是在过滤器中修改Zuul的RequestContext ctx对象

//设置请求为短连接ctx.addZuulRequestHeader("connection","close");

再次请求之后发现

Spring Cloud Zuul网关怎么修改为短连接

纳尼,怎么还是长连接。那么说明可能是我的设置没有生效或者被覆盖掉了。遇到问题,除了度娘,跟着源码走一遭也是最好的方式。花了大半天时间,终于让我找到原因了。

原因是代理类ProxyRequestHelper里面有段逻辑。

publicbooleanisIncludedHeader(StringheaderName){ Stringname=headerName.toLowerCase(); RequestContextctx=RequestContext.getCurrentContext(); if(ctx.containsKey(IGNORED_HEADERS)){ Objectobject=ctx.get(IGNORED_HEADERS); if(objectinstanceofCollection&&((Collection<?>)object).contains(name)){ returnfalse; } } switch(name){ case"host": if(addHostHeader){ returntrue; } case"connection": case"content-length": case"server": case"transfer-encoding": case"x-application-context": returnfalse; default: returntrue; } }

如果头部存在"connection": "content-length": "server": "transfer-encoding": "x-application-context"这些头的话都被跳过。不会被设置成功。应该是zuul自己的一个机制把。

二、解决方式

那么问题找到了,该怎么修改呢?那么只能自定义路由了。继承并重写这个类。

1、实现自定义路由配置CustomZuulConfig

@ComponentpublicclassCustomZuulConfig{@AutowiredZuulPropertieszuulProperties;@Value("${servletPath}")privateStringservletPath;@BeanpublicCustomRouteLocatorrouteLocator(){CustomRouteLocatorrouteLocator=newCustomRouteLocator(servletPath,this.zuulProperties);returnrouteLocator;}}

2、实现自定义请求代理工具类 重写isIncludedHeader方法。

publicclassCustomRequestHelperextendsProxyRequestHelper{@OverridepublicbooleanisIncludedHeader(StringheaderName){Stringname=headerName.toLowerCase();RequestContextctx=RequestContext.getCurrentContext();if(ctx.containsKey(IGNORED_HEADERS)){Objectobject=ctx.get(IGNORED_HEADERS);if(objectinstanceofCollection&&((Collection<?>)object).contains(name)){returnfalse;}}switch(name){case"content-length":case"host":case"server":case"transfer-encoding":case"x-application-context":returnfalse;default:returntrue;}}}

3、重写实现代理配置类

@Configuration@EnableZuulProxypublicclassCustomZuulProxyConfigextendsZuulProxyAutoConfiguration{@Bean@OverridepublicSimpleHostRoutingFiltersimpleHostRoutingFilter(ProxyRequestHelperhelper,ZuulPropertieszuulProperties,ApacheHttpClientConnectionManagerFactoryconnectionManagerFactory,ApacheHttpClientFactoryhttpClientFactory){CustomRequestHelpercustomRequestHelper=newCustomRequestHelper();returnnewSimpleHostRoutingFilter(customRequestHelper,zuulProperties,connectionManagerFactory,httpClientFactory);}}

然后重新启动,查看请求头。

Spring Cloud Zuul网关怎么修改为短连接

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Spring Cloud Zuul网关怎么修改为短连接的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:vue怎么实现数字变换动画下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18