句容网站制作公司新手学网络运营要多久
2026/3/27 20:06:06 网站建设 项目流程
句容网站制作公司,新手学网络运营要多久,长春网站建设方案外包,广州的房地产网站建设zuul终究还是被时代淘汰了#xff0c;spring基本上也逐渐放弃了Netflix平台#xff0c;自己搞起了gateway。这不得不聊起一个人 Spencer Gibb#xff0c;他是zuul的核心开发#xff0c;带领一群有志青年#xff0c;放弃zuul#xff0c;转战spring cloud gateway。 应用搭…zuul终究还是被时代淘汰了spring基本上也逐渐放弃了Netflix平台自己搞起了gateway。这不得不聊起一个人 Spencer Gibb他是zuul的核心开发带领一群有志青年放弃zuul转战spring cloud gateway。应用搭建其maven依赖如下dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependency之后只需要写个简单的spring boot程序就可以了与zuul不同的是gateway没有Enable开头的开关SpringBootApplicationpublicclassGatewayApplication{publicstaticvoidmain(String[]args){SpringApplication.run(GatewayApplication.class,args);}}这就是gateway与zuul设计哲学的不同。网关配置光完成上述代码肯定不够因为没有配置转发。以下是配置文件的一个例子server:port:80# 网关端口spring:cloud:gateway:routes:-id:user_route# 直接写死目标服务的 IP 和端口uri:http://127.0.0.1:8001predicates:-Path/user/**之后就可以正常转发了。谓词配置配置中的predicates是gateway的谓词这部分可谓非常复杂了。上述例子里用的是路径谓词。此外我还整理了其他比较好用的谓词.谓词名称用途典型场景Path匹配请求路径将/api/转发给某个服务Query匹配请求参数根据 URL 中的参数如版本号分流Header匹配请求头根据User-Agent或自定义 Header 鉴权Method匹配请求方法只允许 GET 或 POST 请求通过Cookie匹配 Cookie针对特定用户群体的灰度发布Host匹配域名基于域名的路由如*.abc.comRemoteAddr匹配客户端 IP黑白名单、IP 限流After/Before匹配时间活动期间开启特定页面或维护窗口过滤器除了谓词以外gateway还提供了过滤器配置以达到更精致的网关控制。以下是常见的过滤器分类过滤器名称 (Filter Name)核心作用请求处理AddRequestHeader给请求头添加自定义信息AddRequestParameter给请求添加参数RewritePath重写请求路径最常用StripPrefix截断请求路径前缀RequestRateLimiter请求限流令牌桶算法响应处理AddResponseHeader给响应头添加信息DedupeResponseHeader去除响应头中重复的值SetStatus修改返回的状态码路由增强Hystrix熔断保护旧版RequestSize限制请求包大小Retry失败自动重试转发实现gateway是怎么转发的gateway是基于WebFlux技术的。gateway写了一个RoutePredicateHandlerMapping,该类实现了HandlerMapping接口所以充当了传统servlet里控制器的角色。核心方法在lookupRoute里。在追踪gateway源码时我们可以记录一下堆栈的变化。线程Thread[reactor-http-nio-2,5,main]at org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping.lookupRoute(RoutePredicateHandlerMapping.java:128)at org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping.getHandlerInternal(RoutePredicateHandlerMapping.java:87)at org.springframework.web.reactive.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:181)线程Thread[reactor-http-nio-2,5,main]at org.springframework.cloud.gateway.handler.FilteringWebHandler.handle(FilteringWebHandler.java:77)at org.springframework.web.reactive.result.SimpleHandlerAdapter.handle(SimpleHandlerAdapter.java:45)at org.springframework.web.reactive.DispatcherHandler.invokeHandler(DispatcherHandler.java:161)线程Thread[reactor-http-nio-2,5,main]at org.springframework.cloud.gateway.filter.NettyRoutingFilter.filter(NettyRoutingFilter.java:104)at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:138)at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44)在NettyRoutingFilter这个类里终于找到了转发的代码了,我只贴一行代码不过这行代码可够长的了FluxHttpClientResponseresponseFluxthis.httpClient.headers(headers-{headers.add(httpHeaders);if(preserveHost){Stringhostrequest.getHeaders().getFirst(HttpHeaders.HOST);headers.add(HttpHeaders.HOST,host);}else{// let Netty set it based on hostnameheaders.remove(HttpHeaders.HOST);}}).request(method).uri(url).send((req,nettyOutbound)-{if(log.isTraceEnabled()){nettyOutbound.withConnection(connection-log.trace(outbound route: connection.channel().id().asShortText(), inbound: exchange.getLogPrefix()));}returnnettyOutbound.send(request.getBody().map(dataBuffer-((NettyDataBuffer)dataBuffer).getNativeBuffer()));}).responseConnection((res,connection)-{// 省略很多很多代码。。。。。。。returnMono.just(res);});

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询