上篇:

https://zhuanlan.zhihu.com/p/183930681​zhuanlan.zhihu.com


一、概述简介

1、官网

上一代zuul 1.x:Netflix/zuul

当前gateway:

官网 :https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/

官网趴下了的重点:

(1)Spring Cloud Gateway是基于Spring Boot 2.x,Spring WebFlux和Project Reactor 构建的。结果,当您使用Spring Cloud Gateway时,许多您熟悉的同步库(例如,Spring Data和Spring Security)和模式可能不适用。如果您对这些项目不熟悉,建议您在使用Spring Cloud Gateway之前先阅读它们的文档以熟悉一些新概念。Spring Boot 2.xSpring Cloud Gateway是基于Spring Boot 2.x,Spring WebFlux和Project Reactor 构建的。结果,当您使用Spring Cloud Gateway时,许多您熟悉的同步库(例如,Spring Data和Spring Security)和模式可能不适用。如果您对这些项目不熟悉,建议您在使用Spring Cloud Gateway之前先阅读它们的文档以熟悉一些新概念。Spring WebFluxSpring Cloud Gateway是基于Spring Boot 2.x,Spring WebFlux和Project Reactor 构建的。结果,当您使用Spring Cloud Gateway时,许多您熟悉的同步库(例如,Spring Data和Spring Security)和模式可能不适用。如果您对这些项目不熟悉,建议您在使用Spring Cloud Gateway之前先阅读它们的文档以熟悉一些新概念。Project Reactor 构建的Spring Cloud Gateway是基于Spring Boot 2.x,Spring WebFlux和Project Reactor 构建的。结果,当您使用Spring Cloud Gateway时,许多您熟悉的同步库(例如,Spring Data和Spring Security)和模式可能不适用。如果您对这些项目不熟悉,建议您在使用Spring Cloud Gateway之前先阅读它们的文档以熟悉一些新概念。
(2)Spring Cloud Gateway需要Spring Boot和Spring Webflux提供的Netty运行时。它不能在传统的Servlet容器中或作为WAR构建时使用。

2、是什么?

(1)概述

Spring Cloud 全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但是在2.x版本中,zuul的升级一直跳票,Spring Cloud最后自己研发一个网关替代了Zuul,那就是Spring Cloud Gateway,一句话:gateway是原zuul1.版的替代

Gateway是在spring生态系统之上构建的Api网关服务,基于Spring5,SpringBoot2.和Project Reactor等技术。
Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能,例如:熔断、限流、重试等

网站:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/

Spring Cloud Gateway是Spring Cloud的一个全新项目,基于Spring5.0+SpringBoot2.x和Project Reactor等技术开发的网关,它旨在为微服务框架提供一种简单有效的统一的API路由管理方式。
Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Zuul,在Spring Cloud以上2.x以上的版本中,没有对新版本的Zuul2.x以上最新高性能版本进行集成,仍然还是使用的Zuul.x非Reactor模式的老版本。而是为了提升网关性能,Spring Cloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层使用了高性能的Reactor模式通框架Netty。
Spring Cloud Gateway目前提供统一的路由方式且基于Filter链的方式提供了网关基本的功能,例如:安全、监控/指标、和限流等

一句话:

SpringCloud Gateway使用的是Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架

源码架构

3、能干嘛

  • 反向代理
  • 鉴权
  • 流量控制
  • 熔断
  • 日志监控

4、微服务架构中网关在哪里

5、有Zuull了怎么又出来gateway(_GateWay非阻塞异步模型)

我们为什么选择Gateway?

(1)netflix不太靠谱,zuul2.0一直跳票,迟迟不发布

一方面zuul1.0已经进入了维护阶段,而且Gateway是SpringCloud团队研发的,是亲儿子产品,值得信赖
Gateway是基于异步非阻塞模型上进行开发的,性能方面不需要担心,虽然Netfilx早在发布了最新的zuul2.x,但是SpringCloud貌似没有整合计划。而且Netfilx相关的组件进入维护期;不知前景如何?
多方面综合考虑Gateway是很理想的网关选择

(2)SpringCloud Gateway具有如下特性

基于Spring Framework5,Project Reactor和SpringBoot2.x进行构建
动态路由:能够匹配任何请求属性;
可以对路由指定Project (断言)和Filter(过滤器)
集成Hystrix的断路器功能;
集成Spring Cloud服务发现功能;
易于编写Project (断言)和Filter(过滤器)
请求限流功能;
支持路径重写

(3)SpringCloud Gateway与Zuul的区别?

在Spring Cloud Fincheley正式版之前,Spring Cloud推荐的网关是Netfile提供了Zuul;
1、Zuul1.x,是一个基于阻塞I/O的API Gateway
2、Zuul1.x基于Servlet2.5使用阻塞架构,它不支持任何长连接(如:WebSocket)Zuul的设计和Nginx较像,每次I/O操作都是从工作线程中选择一个执行,请求线程被阻塞到工作线程完成,但是差别Nginx是用C++实现,Zuul用java实现,而JVM本身会有第一次加载较慢的情况,使得Zuul的性能相对较差。
3、Zuul2.x理念更先进,想基于Netty非阻塞和支持长连接,但SpringCloud目前还没有整合。Zuul2.x的性能较Zuul1.x较大的提升。 在性能方面,根据官方提供基准测试,Spring Cloud Gateway的RPS(每秒请求数)是Zuul的1.6倍
4、Spring Cloud Gateway建立在Spring Framework5、Project Reactor和SpringBoot2.x之上,使用非阻塞API。
5、Spring Cloud Gateway还支持WebSocket,并且与Spring紧密集成拥有更好的开发体验。

Zuul1.x模型

Spring Cloud 中所集成的Zuul版本,采用Tomcat容器,使用的是传统是Servlet IO处理模型。
由于Servlet生命周期:是由Servlet container进行生命周期管理。
container启动时构造servlet对象并调用servlet init() 进行初始化;
container运行时接受请求,并为每个请求分配一个线程(一般从线程池中获取空闲线程 ),然后调用servlet()。
container关闭时调用servlet destory() 销毁servlet。

上述模式的缺点:

servlet是一个简单的网络IO模型,当请求进入Servlet container时,Servlet container就会为其绑定一个线程,在并发不高的场景下,这种模型是适用的。但是一旦高并发(比如抽风用jemeter压),线程数量就会上涨,而线程线程资源代价是昂贵的(上线文切换,内存消耗)严重影响请求的处理时间。 一些简单的业务场景下,不希望为每个request分配一个线程,只需要1个或几个线程就能对极大并发的请求,这种业务场景下,servlet模型没有任何优势。
所以,Zuul1.x是基于servlet之上的一个阻塞式处理模型,即Spring实现处理所有request请求一个servlet(DispatcherServlet)并由该Servlet阻塞式处理。
所以,Spring Cloud Zuul无法摆脱servlet模型的弊端。

Gateway模型

WebFlux是什么?

官网:Web on Reactive Stack

说明

二、三大核心概念

1、Route(路由)

路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如断言为true则匹配该路由

2、Predicate(断言)

参考的是Java8的java.util.function.Predicate
开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由

3、Filter(过滤)

指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改.

4、总结

web请求,通过一些匹配条件,定位到服务真正的节点。并在这个转发过程的前后,进行一些精细化控制。
predicat就是我们匹配的条件;而filter,就可以理解为一个无所不能的拦截器,有了这两个元素,再加上目标url,就可以实现一个具体的路由了


四、Gateway工作流程

1、官网总结

2、核心逻辑

路由转发+执行过滤器链


五、入门配置

1、Gateway9527搭建

(1)在父工程cloud2020下创建一个子模块名为“cloud-gateway-gateway9527”

(2)添加子模块cloud-gateway-gateway9527的pom文件

cloud2020cloud-gateway-gateway9527pom.xml

<?

(3)写YML

cloud2020cloud-gateway-gateway9527srcmainresourcesapplication.yml

server:

(4)主启动类

cloud2020cloud-gateway-gateway9527srcmainjavacomstudyspringcloudGateWayMain9527.java

package 

9527网关如何做路由映射呢?

(1)在cloud-gateway-gateway9527微服务工程下的的yml全局配置文件配置:

cloud2020cloud-gateway-gateway9527srcmainresourcesapplication.yml

spring:

说明

(2)启动微服务工程(先启动EurekaMain7001、后启动PaymentMain8001、最后启动GateWayMain9527

(3)测试

http://eureka7001.com:7001/

添加网关前:http://localhost:8001/payment/get/31

添加网关后:http://localhost:9527/payment/get/31

2、Gateway配置路由的两种方式

若想找微服务的端口号,可以访问:http://localhost:9527/payment/lb

YML配置说明(Gateway网关路由有两种配置方式)

需求案例:百度国内新闻网站,需要外网(百度新闻--海量中文资讯平台)

自己写一个:百度新闻、业务需求(通过9527网关访问到外网的百度新闻网址)

(1)编写路由构建器(业务类)

cloud2020cloud-gateway-gateway9527srcmainjavacomstudyspringcloudconfigGateWayConfig.java

package 

(2)启动微服务主程序GateWayMain9527

(3)测试访问外网(路由网关做映射)

http://localhost:9527/guonei

3、GateWay配置动态路由

默认情况下Gatway会根据注册中心注册的服务列表, 以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能

(1)yml配置参数调整(以下为例)

cloud2020cloud-gateway-gateway9527srcmainresourcesapplication.yml

spring:

(2)启动一个eureka7001+两个服务提供者8001/8002

(3)测试:http://localhost:9527/payment/lb (路由自动切换)

知乎视频​www.zhihu.com

4、GateWay常用的Predicate

(1)场景:比如项目上线了,出现点问题,我们采用路由时间设置,不到这个时间是无法访问,访问将会报错,如图所示:

设置这个配置,我们只需要在yml文件配置即可

- 

当时间到了就可以访问

http://localhost:9527/payment/lb

(2)场景二:采用cookies去访问(前提满足时间符合,其次必须带cookies访问)

也是自动切换,若不带cookie 访问将报404

C:

(3)场景三:正则表达式配置去访问(这正则表达式必须是整数,若出现负数将会出现404

设置这个配置,我们只需要在yml文件配置即可

- 

重启程序访问:自动切换

C:

输入负数,报错出现404

C:

总结配置

5、GateWay的Filter

(1)是什么?

官网:

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gatewayfilter-factories

官网:Spring Cloud Gateway

(2)常用的GatewayFilter

自定义过滤器(自定义全局GlobalFilter)

两个主要接口介绍:implments GlobalFilter,OrderId

能干嘛?

全局日志记录
统一网关鉴权

案例代码

(1)实现implments GlobalFilter,OrderId接口

cloud2020cloud-gateway-gateway9527srcmainjavacomstudyspringcloudfilterMyLogGateWayFilter.java

package 

(2)启动测试访问:http://localhost:9527/payment/lb?uname=z3

知乎视频​www.zhihu.com

控制台打印输出信息:

gateway sentinel 熔断 不起作用_微服务Gateway新一代网关相关推荐

  1. gateway sentinel 熔断 不起作用_《一起学sentinel》一

    <一起学sentinel>一.一起搭建sentinel服务 一.概述 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负 ...

  2. gateway sentinel 熔断 不起作用_熔断器交流与直流有什么区别?错过这篇文章悔之晚矣!【超详细】上海民熔...

    原标题:熔断器交流与直流有什么区别?错过这篇文章悔之晚矣![超详细]上海民熔 导语 民熔熔断器是利用金属导体作为熔体串联于电路中,当过载或短路电流通过熔体时,因其自身发热而熔断,从而分断电路的一种电器 ...

  3. gateway sentinel 熔断 不起作用_熔断器怎么选择?看完这篇文章我恍然大悟!上海民熔...

    导语 民熔熔断器是利用金属导体作为熔体串联于电路中,当过载或短路电流通过熔体时,因其自身发热而熔断,从而分断电路的一种电器.熔断器结构简单,使用方便,广泛用于电力系统.各种电工设备和家用电器中作为保护 ...

  4. gateway sentinel 熔断 不起作用_技术丨纯电动汽车高压熔断器计算及选型

    一.概述 现阶段动力电池能量密度越来越高,单体电芯容量越来越大,各高压部件一旦出现短路现象而无相应的保护措施,轻则部件损坏,重则引起火灾(尤其动力电池),后果将不堪设想,所以各高压部件回路的保护至关重 ...

  5. gateway sentinel 熔断 不起作用_民熔小课堂|关于熔断器保险丝的知识扫盲!

    点击上方蓝字关注我们 关于熔断器的知识 大家应该都学习的差不多了 那么关于保险丝的小知识 你知道吗? 最简单的电子电路保护形式是具有恰当额定值的保险丝.为应用开发适当解决方案时,有各种保险丝可供选择, ...

  6. gateway sentinel 熔断 不起作用_Spring Cloud Alibaba集训营第五天(服务熔断和限流)

    前言:为什么需要流控降级 我们的生产环境经常会出现一些不稳定的情况,如: 大促时瞬间洪峰流量导致系统超出最大负载,load 飙高,系统崩溃导致用户无法下单 "黑马"热点商品击穿缓存 ...

  7. gateway sentinel 熔断 不起作用_Sentinel 的一些概念与核心类介绍

    了解 Sentinel 的一些概念 资源:资源是 Sentinel 的关键概念.资源,可以是一个方法.一段代码.由应用提供的接口,或者由应用调用其它应用的接口. 规则:围绕资源的实时状态设定的规则,包 ...

  8. gateway sentinel 熔断 不起作用_Sentinel实现熔断与限流 - 魔笔钨丝浣

    学习地址:https://www.bilibili.com/video/BV18E411x7eT?p=111 Sentinel 官网地址: 中文文档:/wiki/介绍 随着微服务的流行,服务和服务之间 ...

  9. gateway sentinel 熔断 不起作用_Sentinel 1.8.0 年度版本发布,熔断降级重构升级

    简介:在经过数月的打磨后,Sentinel 1.8.0 版本正式发布!该版本是本年度最重要的版本之一,包含大量特性改进与 bug 修复,尤其是针对熔断降级特性的完善升级(支持任意统计时长.慢调用比例降 ...

最新文章

  1. 安装第三方包查看python版本/第三方包版本
  2. Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】
  3. gcc、arm-linux-gcc和arm-elf-gcc的关系?
  4. SQLServer 2005新功能
  5. IBM Bluemix计划于2017年下半年在云资源中引入英特尔3D XPoint
  6. 10.一文了解JAVA反射超详尽知乎
  7. 邮件服务器搬家,企业邮箱怎么“搬家”
  8. python苹果版安装包_新手必看。关于Python3——windows安装与运行(详细版)
  9. PostgreSQL 跨数据库实例之间的数据访问
  10. c语言输入大写字母输出小写字母,C语言大写字母转换为小写字母,并输出程序...
  11. 10个精选国外免费空间推荐
  12. Django应用容器封装DockerFile分享
  13. 使用ffmpeg合成哔哩哔哩m4s格式的音视频流为mp4
  14. HTTP协议中状态码的含义
  15. 怎么把MySQL数据库卸载干净
  16. 教你制作服务器中更高效率的刷怪塔,我的世界低耗材高效率凋零骷髅刷怪塔制作攻略...
  17. AD18中安装自己绘制的原件库
  18. 三维动漫计算机配置,做三维设计、CG动画一类工作需要怎样的电脑配置?
  19. QQ 空间相册新功能
  20. UVA 1001 Say Cheese 奶酪里的老鼠(最短路,floyd)

热门文章

  1. 我端午节又来免费送书了!
  2. 合格的前端不少,优秀的不多
  3. 点赞!一个程序员花了14小时寻找问题疫苗的流向
  4. 【资料篇】你需要掌握SEO的8个常用知识点
  5. ROS----窃听小乌龟行动计划
  6. FCPX插件:半调图像高级马赛克特效Yanobox Mosaic
  7. P5712 【深基3.例4】Apples(python3实现)
  8. vue-router嵌套路由,默认子路由设置
  9. 视频课程-1小时上手 Spring Boot 及 达梦数据库 做数据展示后端
  10. HTTP、HTTPS、SSL、TLS之间的关系