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

品牌网站建设 蝌蚪5小有没有做网站的多少钱

品牌网站建设 蝌蚪5小,有没有做网站的多少钱,增城营销型网站建设,公司网站建设文章简介#xff1a; 最近通过深入学习Spring Cloud Gateway发现这个框架的架构设计非常简单、有效#xff0c;很多组件的设计都非常值得学习#xff0c;本文就Spring Cloud Gateway做一个简单的介绍#xff0c;以及针对一次请求Spring Cloud Gateway的处理流程做一个较为详细的…简介 最近通过深入学习Spring Cloud Gateway发现这个框架的架构设计非常简单、有效很多组件的设计都非常值得学习本文就Spring Cloud Gateway做一个简单的介绍以及针对一次请求Spring Cloud Gateway的处理流程做一个较为详细的分析。 作者 | 寻筝 来源 | 阿里技术公众号 一 前言 最近通过深入学习Spring Cloud Gateway发现这个框架的架构设计非常简单、有效很多组件的设计都非常值得学习本文就Spring Cloud Gateway做一个简单的介绍以及针对一次请求Spring Cloud Gateway的处理流程做一个较为详细的分析。 二 简介 Spring Cloud Gateway 即Spring官方推出的一款API网关该框架包含了Spring5、SpringBoot2、Project Reactor其中底层通信框架用的netty。Spring Cloud Gateway在推出之初的时候Netflix公司已经推出了类似功能的API网关框架ZUUL但ZUUL有一个缺点是通信方式是阻塞的虽然后来升级到了非阻塞式的ZUUL2但是由于Spring Cloud Gateway已经推出一段时间同时自身也面临资料少、维护性较差的因素没有被广泛应用。 1 关键术语 在使用Spring Cloud Gateway的时候需要理解三个模块即 Route 即一套路由规则是集URI、predicate、filter等属性的一个元数据类。 Predicate 这是Java8函数式编程的一个方法这里可以看做是满足什么条件的时候route规则进行生效。 Filter filter可以认为是Spring Cloud Gateway最核心的模块熔断、安全、逻辑执行、网络调用都是filter来完成的其中又细分为gateway filter和global filter区别在于是具体一个route规则生效还是所有route规则都生效。 可以先上一段代码来看看 RequestMapping(/paramTest)public Object paramTest(RequestParam MapString,Object param) {return param.get(name);}Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes().route(path_route, r -r.path(/get).filters(f - f.addRequestParameter(name, value)).uri(forward:///paramTest)).build();} route方法代表的就是一个路由规则path方法代表的就是一个predicate背后的现实是PathRoutePredicateFactory在这段代码的含义即当路径包含/get的时候当前规则生效。filters方法的意思即给当前路由规则添加一个增加请求参数的filter每次请求都对参数里添加 name:value 的键值对uri 方法的含义即最终路由到哪里去这里的forward前缀会将请求交给spring mvc的DispatcherHandler进行路由进行本机的逻辑调用除了forward以外还可以使用http、https前缀进行http调用lb前缀可以在配置注册中心后进行rpc调用。上图是Spring Cloud Gateway官方文档给出的一个工作原理图Spring Cloud Gateway 接收到请求后进行路由规则的匹配然后交给web handler 进行处理web handler 会执行一系列的filter逻辑。 三 流程分析 1 接受请求 Spring Cloud Gateway的底层框架是netty接受请求的关键类是ReactorHttpHandlerAdapter做的事情很简单就是将netty的请求、响应转为http的请求、响应并交给一个http handler执行后面的逻辑下图为该类的源码仅保留核心逻辑。 Overridepublic Mono Void apply(HttpServerRequest request, HttpServerResponse response) {NettyDataBufferFactory bufferFactory new NettyDataBufferFactory(response.alloc());ServerHttpRequest adaptedRequest;ServerHttpResponse adaptedResponse;//转换请求try {adaptedRequest new ReactorServerHttpRequest(request, bufferFactory);adaptedResponse new ReactorServerHttpResponse(response, bufferFactory);}catch (URISyntaxException ex) {if (logger.isWarnEnabled()) {...}...return this.httpHandler.handle(adaptedRequest, adaptedResponse).doOnError(ex - logger.warn(Handling completed with error: ex.getMessage())).doOnSuccess(aVoid - logger.debug(Handling completed with success));} 2 WEB过滤器链 http handler做的事情第一是将request 和 response转为一个exchange这个exchange非常核心是各个filter之间参数流转的载体该类包含request、response、attributes(扩展字段)接着做的事情就是web filter链的执行其中的逻辑主要是监控。 其中WebfilterChainParoxy 又会引出新的一条filter链主要是安全、日志、认证相关的逻辑由此可见Spring Cloud Gateway的过滤器设计是层层嵌套扩展性很强。 3 寻找路由规则 核心类是RoutePredicateHandlerMapping逻辑也非常简单就是把所有的route规则的predicate遍历一遍看哪个predicate能够命中核心代码是 return this.routeLocator.getRoutes().filter(route - {...return route.getPredicate().test(exchange);}) 因为我这里用的是path进行过滤所以背后的逻辑是PathRoutePredicateFactory来完成的除了PathRoutePredicateFactory还有很多predicate规则。 这些路由规则都能从官方文档上找到影子。 4 核心过滤器链执行 找到路由规则后下一步就是执行了这里的核心类是FilteringWebHandler其中的源码为 做的事情很简单 获取route级别的过滤器获取全局过滤器两种过滤器放在一起并根据order进行排序执行过滤器链因为我的配置里包含了一个添加请求参数的逻辑所以红线箭头处就是我配置的gateway filter名为 AddRequestParameterGatewayFilterFactory其余全是Gloabl Filter这些过滤器的功能主要是url解析请求转发响应回写等逻辑因为我们这里用的是forward schema所以请求转发会由ForwardRoutingFilter进行执行。 5 请求转发 ForwardRoutingFilter做的事情也很简单直接复用了spring mvc的能力将请求提交给dispatcherHandler进行处理dispatcherHandler会根据path前缀找到需要目标处理器执行逻辑。 Override public Mono Void filter(ServerWebExchange exchange, GatewayFilterChain chain) {URI requestUrl exchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR);String scheme requestUrl.getScheme();if (isAlreadyRouted(exchange) || !forward.equals(scheme)) {return chain.filter(exchange);}setAlreadyRouted(exchange);//TODO: translate url?if (log.isTraceEnabled()) {log.trace(Forwarding to URI: requestUrl);}return this.dispatcherHandler.handle(exchange); } 6 响应回写 响应回写的核心类是NettyWriteResponseFilter但是大家可以注意到执行器链中NettyWriteResponseFilter的排序是在最前面的按道理这种响应处理的类应该是在靠后才对这里的设计比较巧妙。大家可以看到chain.filter(exchange).then()意思就是执行到我的时候直接跳过下一个等后面的过滤器都执行完后才执行这段逻辑这种行为控制的方法值得学习。 Override public Mono Void filter(ServerWebExchange exchange, GatewayFilterChain chain) {// NOTICE: nothing in pre filter stage as CLIENT_RESPONSE_ATTR is not added// until the WebHandler is runreturn chain.filter(exchange).then(Mono.defer(() - {HttpClientResponse clientResponse exchange.getAttribute(CLIENT_RESPONSE_ATTR);if (clientResponse null) {return Mono.empty();}log.trace(NettyWriteResponseFilter start);ServerHttpResponse response exchange.getResponse();NettyDataBufferFactory factory (NettyDataBufferFactory) response.bufferFactory();//TODO: what if its not nettyfinal Flux NettyDataBuffer body clientResponse.receive().retain() //TODO: needed?.map(factory::wrap);MediaType contentType response.getHeaders().getContentType();return (isStreamingMediaType(contentType) ?response.writeAndFlushWith(body.map(Flux::just)) : response.writeWith(body));})); } 四 总结 整体读完Spring Cloud Gateway请求流程代码后有几点感受 过滤器是Spring Cloud Gateway最核心的设计甚至于可以夸张说Spring Cloud Gateway是一个过滤器链执行框架而不是一个API网关因为API网关实际的请求转发、请求响应回写都是在过滤器中做的这些是Spring Cloud Gateway感知不到的逻辑。Spring Cloud Gateway路由规则获取的模块具备优化的空间因为是循环遍历进行获取的如果每个route规则较多predicate规则较复杂就可以考虑用map进行优化了当日route规则predicate规则也不会很复杂兼顾到代码的可读性当前方式也没有什么问题。作为API网关框架内置了非常多的过滤器如果有过滤器的卸载功能可能会更好用户可用根据实际情况卸载不必要的功能背后减少的逻辑开销在调用量极大的API网关场景收益也会很可观。 原文链接 本文为阿里云原创内容未经允许不得转载。
http://www.pierceye.com/news/453186/

相关文章:

  • 知识网站有哪些h5用什么制作
  • 广州网站制作联系方式上海共有多少家企业
  • 自己建一个网站需要什么网站关键词分析工具
  • 建三江建设局网站四川省建设厅官方网站电话
  • 福建志佳建设工程发展有限公司网站vi品牌包装
  • 专业门户网站开发公司龙岩正规全网品牌营销招商
  • 网站怎么做qq微信登陆政务网站的建设时期的概述
  • 购物网站的目的和意义西安做网站xamokj
  • 厦门市建设局网站网站开发周记30篇
  • 工业园区门户网站建设方案塘沽网站开发
  • 郑州网站设计 公司驻马店市可以做网站的公司
  • 推荐盐城网站开发安陆网站开发
  • wordpress中文网站模板软件开发者路线图
  • 福清市建设局网站深圳网站制作品牌祥奔科技
  • 工程建设采购有哪些网站做网络销售怎么样
  • wordpress数据库和网站文件下载商业网站成功的原因
  • 30岁转行做网站设计百度秒收网站
  • 网页设计与制作心得体会1000福州网站seo公司
  • 学校网站定位手机网站建设怎么样
  • 苏州科技网站建设模板网站 seo
  • 免费qq刷赞网站推广网站建设具体项目及价格
  • 怎么做网站页面代码搜索网站的根目录
  • 网站建设免责申明书做qq图片的网站吗
  • 营销型单页网站电子商务平台建设
  • 去柬埔寨做网站是传销吗app推广服务部
  • 网站建站的流程海南住建部建设网站的网站
  • 网站建设与推广的步骤网站建设费用如何做账务处理
  • 简单网站建设运营网页改版
  • 赣州网站建设江西网站建设怎么用网页制作一个网站
  • phpcms v9怎么做网站建设项目网站备案