大家好!我是西柚仔!这篇文章是第一次写博客,2019年11月,我和几个大学同学共同创建了奥利奥团队,为了更好地走下去,我们整个团队开始一起写博客,一来可以当作笔记,二来可以把团队的知识和经验分享出去,团队成员发布之后会由团队号统一转载,也希望大家可以关注我们,支持我们!
团队CSDN链接:
团队码云链接:
做过微服务的朋友都知道,初学的时候我们用的Zuul()网关,Zuul 1.0已经进入了维护阶段,但Zuul在升级为2.x的时候,核心程序员跳槽,高层神仙打架,2.x版本一直迟迟不能完善,Spring Cloud也就没有整合的计划了。
Spring Cloud等不及了,最后自己研发了一套网关代替Zuul,那就是SpringCloud Gateway(.2.3.RELEASE/reference/html/),Gateway是基于异步非阻塞模型,性能优越。
这是我在官网截下来的图,官方的解释是:该项目提供了一个在Spring生态系统之上构建的API网关,包括:Spring 5,Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到API,并为它们提供跨领域的关注,例如:安全性,监视/指标和弹性。
Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标就是要替代Zuul,在Spring Cloud 2.0以上的版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然使用Zuul 1.x的非Reactor模式(老版本),目的是为了提高网关的性能。Spring Cloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用的是高性能的Reactor模式通信框架的Netty。
在这里顺便介绍一下什么是WebFlux(.2.7.RELEASE/spring-framework-reference/web-reactive.html#spring-webflux)
官方解释:Spring框架中包含的原始Web框架Spring Web MVC是专门为Servlet API和Servlet容器而构建的。反应性堆栈Web框架Spring WebFlux在更高版本5.0中添加。它是完全无阻塞的,支持 Reactive Streams背压,并在Netty,Undertow和Servlet 3.1+容器等服务器上运行。
这两个Web框架都反映了其源模块的名称(spring-webmvc和 spring-webflux),并在Spring Framework中并存。每个模块都是可选的。应用程序可以使用一个模块,也可以使用两个模块,在某些情况下,也可以使用两个模块,例如,带有react的Spring MVC控制器WebClient
。
总结:传统的Web框架,比如struts2和Spring MVC等都是基于Servlet API和Servlet容器基础上运行的。在Servlet 3.1之后有了异步非阻塞的支持,而WebFlux是一个典型非阻塞异步的框架,它的核心是基于Reactor的相关API实现的,相对于传统Web框架来说,它可以运行在Netty、Undertow及支持Servlet 3.1的容器上。注意:非阻塞+函数式编程,Spring 5 要求的是Java 8。
Spring WebFlux是Spring 5.0引入的新的响应式框架,区别于Spring MVC,它不需要依赖Servlet API,它是完全异步非阻塞的,并且基于Reactor来实现响应式规范。
一句话总结:Spring Cloud Gateway使用的是Webflux中的reactor-netty响应式组件,底层使用了Netty通讯框架。以下是我部署的项目,导入依赖后看到的结构,后面也会把源码放在码云,然后给链接给你们。
在Spring Cloud Finchley正式版发布之前,Spring Cloud推荐的网关是Netflix提供的Zuul。
我在上面给你们的Gateway地址中,网页中有一张这样的官方图,这张图很好的诠释出它的工作流程。
客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到Gateway Web Handler。Handler通过特定于请求的过滤器链运行请求。筛选器由虚线分隔的原因是,筛选器可以在发送代理请求之前和之后运行逻辑。执行所有“pre”过滤器进行逻辑过滤。然后发出代理请求。发出代理请求后,将运行“post”过滤器执行逻辑过滤。
Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器可以做响应内容、响应头修改、日志输出和流量监控等。
总结:核心逻辑就是路由转发+执行过滤器链。
很高兴大家阅读西柚仔的文章,后面的续篇会讲解Gateway的三大核心概念及使用(Route路由、Predicate断言和Filter过滤),还有Gateway的入门配置及实战,源码在后面也会发给大家,感谢,我们下星期见!
本文发布于:2024-01-28 05:39:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063915835189.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |