您好,登錄后才能下訂單哦!
今天小編給大家分享一下Spring Cloud Zuul網關怎么修改為短連接的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
之前在用zuul網關的時候,請求幾次然后連接就斷開了。原因是因為http1.1之后,默認走的都是connection=keep-alive 長連接。但沒有心跳維持,顧1分鐘斷開一次。但RestFul一般都是走短連接就行了。因此想著只要修改頭部connection屬性就行了.
就是在過濾器中修改Zuul的RequestContext ctx對象
//設置請求為短連接 ctx.addZuulRequestHeader("connection", "close");
再次請求之后發現
納尼,怎么還是長連接。那么說明可能是我的設置沒有生效或者被覆蓋掉了。遇到問題,除了度娘,跟著源碼走一遭也是最好的方式。花了大半天時間,終于讓我找到原因了。
原因是代理類ProxyRequestHelper里面有段邏輯。
public boolean isIncludedHeader(String headerName) { String name = headerName.toLowerCase(); RequestContext ctx = RequestContext.getCurrentContext(); if (ctx.containsKey(IGNORED_HEADERS)) { Object object = ctx.get(IGNORED_HEADERS); if (object instanceof Collection && ((Collection<?>) object).contains(name)) { return false; } } switch (name) { case "host": if(addHostHeader) { return true; } case "connection": case "content-length": case "server": case "transfer-encoding": case "x-application-context": return false; default: return true; } }
如果頭部存在"connection": "content-length": "server": "transfer-encoding": "x-application-context"這些頭的話都被跳過。不會被設置成功。應該是zuul自己的一個機制把。
那么問題找到了,該怎么修改呢?那么只能自定義路由了。繼承并重寫這個類。
1、實現自定義路由配置CustomZuulConfig
@Component public class CustomZuulConfig { @Autowired ZuulProperties zuulProperties; @Value("${servletPath}") private String servletPath; @Bean public CustomRouteLocator routeLocator() { CustomRouteLocator routeLocator = new CustomRouteLocator(servletPath, this.zuulProperties); return routeLocator; } }
2、實現自定義請求代理工具類 重寫isIncludedHeader方法。
public class CustomRequestHelper extends ProxyRequestHelper { @Override public boolean isIncludedHeader(String headerName) { String name = headerName.toLowerCase(); RequestContext ctx = RequestContext.getCurrentContext(); if (ctx.containsKey(IGNORED_HEADERS)) { Object object = ctx.get(IGNORED_HEADERS); if (object instanceof Collection && ((Collection<?>)object).contains(name)) { return false; } } switch (name) { case "content-length": case "host": case "server": case "transfer-encoding": case "x-application-context": return false; default: return true; } } }
3、重寫實現代理配置類
@Configuration @EnableZuulProxy public class CustomZuulProxyConfig extends ZuulProxyAutoConfiguration { @Bean @Override public SimpleHostRoutingFilter simpleHostRoutingFilter(ProxyRequestHelper helper, ZuulProperties zuulProperties, ApacheHttpClientConnectionManagerFactory connectionManagerFactory, ApacheHttpClientFactory httpClientFactory) { CustomRequestHelper customRequestHelper = new CustomRequestHelper(); return new SimpleHostRoutingFilter(customRequestHelper, zuulProperties, connectionManagerFactory, httpClientFactory); } }
然后重新啟動,查看請求頭。
以上就是“Spring Cloud Zuul網關怎么修改為短連接”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。