这篇文章主要介绍“SpringCloud Gateway2020.0.2最新版本使用分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud Gateway2020.0.2最新版本使用分析”文章能帮助大家解决问题。SpringCloud Gateway 作为 SpringCloud 中一个全新项目,目的是为了取代 Zuul 网关。本文使用版本为
SpringCloud 版本2020.0.2
spring-cloud-starter-gateway版本3.0.2
spring-boot-starter版本2.4.4该项目提供了一个用于在Spring WebFlux之上构建API网关的库。 Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到API,并为它们提供跨领域的关注点,例如:安全性,监视/指标和弹性。建立在Spring Framework 5,Project Reactor和Spring Boot 2.0之上能够匹配任何请求属性上的路由。谓词和过滤器特定于路由。断路器集成。Spring Cloud DiscoveryClient集成易于编写的谓词和过滤器请求速率限制路径改写什么是路由?
路由是构建网关的基本模块,由ID,目标URI,一系列的断言和过滤器组成,如果断言为true,则匹配该路由
什么是断言?
开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
什么是过滤?
值得是Spring框架中GatewayFilter的实例,使用过滤器,可以使请求在被路由前/后进行修改
然后让我们先通过几个小demo先了解一下gateway的大概使用,然后我们在深入了解更多相关知识,这样比较容易理解。pom.xml配置文件、配置类选择一个就ok
根据此配置,访问 http:localhost:9527/s 将直接转发到百度首页,页面内容展示百度首页内容
application.ymlGatewayConfig.java org.example.springcloud.config.GatewayConfig
将”ip:${server.port}+${route.path}”转发到”${route.url}”例”120.0.0.1:9527/s”转发到”https://www.baidu.com/s”可以尝试访问以下链接获取配置效果启动类org.example.springcloud.GatewayMain9527
通过微服务名实现动态路由,这样可以在服务中心注册的对应的多个服务之间来回调用了。
需要三个微服务,服务结构:父项目eureka服务,作为注册中心gateway服务,作为网关provider服务,作为网关转发的服务创建项目,选择maven(个人喜好也可选择SpringInitializr)->输入名称及相关信息(我这里起的名字是 springcloudgateway)->点击finish创建项目修改pom,pom中添加版本控制创建项目,选择maven(个人喜好也可选择SpringInitializr)->输入相关信息->Finish我这里用的模块名:cloud-eurekapom中添加坐标依赖创建类EurekaApplication org.example.springcloud.eureka.EurekaApplication
在main/resources下面创建application.yml 并添加配置启动服务没有问题(控制台内容略),并且访问 http://localhost:9001/ 可以打开页面这个模块假装作为提供服务的微服务,用来测试网关是否生效的。创建项目,选择maven(个人喜好也可选择SpringInitializr)->输入相关信息->Finish我这里用的模块名:cloud-providerpom中添加坐标依赖创建类ProviderApplication org.example.springcloud.provider.ProviderApplication
创建controller层类TestController org.example.springcloud.provider.controller.TestController
在main/resources下面创建application.yml 并添加配置服务启动没问题,并且访问 http://localhost:9003/test/lb 可以获取到返回内容,说明接口没问题。并且打开eureka页面 http://localhost:9001/ 可以看到服务已经注册进去,说明服务注册也没问题。gateway模块 创建项目,选择maven(个人喜好也可选择SpringInitializr)->输入相关信息->Finish我这里用的模块名:cloud-gatewaypom中添加坐标依赖创建类GatewayApplication org.example.springcloud.gateway.GatewayApplication
在main/resources下面创建application.yml 并添加配置并且打开eureka页面 http://localhost:9001/ 可以看到服务已经注册进去,说明服务注册没问题。根据配置访问 http://localhost:9002/test/lb 如果出现正常返回页面,则说明网关配置成功。但此时应该是访问失败的,会出现如下页面,并伴随控制台的如下报错:看,报错内容找我们的主机名了,java.net.UnknownHostException: failed to resolve 'WRGHO-VIEZQZWFI' after 4 queries
中的 ‘WRGHO-VIEZQZWFI’ 就是我的主机名
不要着急,这时候我们往目标服务(也就是provider服务)中添加这样一条配置就ok了:此配置项表示:表示在猜测主机名时,应优先使用服务器的IP地址,而不要使用OS报告的主机名然后重启provider服务,重新访问,如果访问的时候报错503,看gateway控制台内容提示No servers available for service: cloud-provider
,说明服务虽然重启了但是还么有注册到服务中心里,我们等一小会等待注册进去再尝试就ok了。
错误页面和控制台提示内容:至此我们应该对gateway的使用方法有个大体的了解和印象了,然后让我们继续学习相关知识。
开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。
也就是我们进行路由跳转的条件。
https://docs.spring.io/spring-cloud-gateway/docs/3.0.2/reference/html/#gateway-request-predicates-factories但是实际上我们还有好多种断言,我们可以通过官方文档查询到,可以看我下面的连接,但是最好自己去官网找到自己响应版本的文档看(鬼知道以后版本会不会出新的断言),并且官方文档有响应的例子以及解释。
在我们的gateway服务启动时候,控制台业务打印出来我们断言的方式。
Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping免费云主机域名基础架构的一部分。 Spring Cloud Gateway包括许多内置的路由断言工厂。所有这些谓词都与HTTP请求的不同属性匹配。您可以将多个路由断言工厂与逻辑和语句结合使用。断言种类:After该断言匹配在指定日期时间之后发生的请求。- After=2017-01-20T17:42:47.789-07:00[America/Denver]
Before该断言匹配在指定日期时间之前发生的请求。- Before=2017-01-20T17:42:47.789-07:00[America/Denver]
Between 该断言匹配在两个指定日期时间之间发生的请求。- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]
Cookie该断言采用两个参数,即cookie名称和一个regexp(这是Java正则表达式)。该断言匹配具有给定名称且其值与正则表达式匹配的cookie。- Cookie=chocolate, ch.p
Header该断言采用两个参数,header名称和一个regexp(这是Java正则表达式)。该断言与具有给定名称的header匹配,该header的值与正则表达式匹配。- Header=X-Request-Id, d+
Host该断言采用一个参数:主机名模式列表。该模式是带有的Ant样式的模式。作为分隔符。该断言匹配与模式匹配的Host标头。- Host=**.somehost.org,**.anotherhost.org
Method该断言采用方法参数,该参数是一个或多个参数:要匹配的HTTP方法。- Method=GET,POST
Path该断言采用两个参数:Spring PathMatcher模式列表和一个称为matchTrailingSlash的可选标志(默认为true)。- Path=/red/{segment},/blue/{segment}
Query该断言采用两个参数:必需的参数和可选的regexp(这是Java正则表达式)。如果请求包含匹配配置的查询参数,则路由匹配。- Query=green
RemoteAddr该断言采用sources列表(最小大小为1),这些源是CIDR标记(IPv4或IPv6)字符串,例如192.168.0.1/16(其中192.168.0.1是IP地址,而16是子网掩码) )。- RemoteAddr=192.168.1.1/24
ReadBody文档中没写这个,但是启动的时候控制台显示了,RoutePredicateFactory的实现类ReadBodyRoutePredicateFactory写了一点注释。断言可读取主体并应用用户提供的断言在主体上运行。主体被缓存在内存中,因此后续对断言的调用无需再次反序列化。Weight文档中没写这个,但是启动的时候控制台显示了,RoutePredicateFactory的实现类WeightRoutePredicateFactory也没写啥注释过滤器(Filter)GatewayFilter允许以某种方式修改传入的HTTP请求或传出的HTTP响应。路由过滤器的作用域是特定的路由。 Spring Cloud Gateway包括许多内置的GatewayFilter工厂。
GlobalFilter接口具有与GatewayFilter相同的签名。这些是特殊过滤器,有条件地应用于所有路由。
在我看的这个文档中,有两种Filter(GatewayFilter和GlobalFilter)GatewayFilter官网给出了这么31个过滤器工厂(工厂就是产生对象的,也就是相当于31个过滤器),
GlobalFilter官网给出了这么10个过滤器工厂(工厂就是产生对象的,也就是相当于31个过滤器)
怎么用呢?
就像是断言(Predicate)一样,在spring.cloud.gateway.routes
下面添加就好了,和id
、uri
同级。
我们自定义过滤器需要实现 GlobalFilter,Ordered
这两个接口。implements GlobalFilter,Ordered
能干嘛?全局日志记录统一网关鉴权……我们的自定义过滤器代码
MyLogGatewayFilter.java org.example.springcloud.gateway.filter.MyLogGatewayFilter
写好了自定义过滤器就ok了,不需要进行什么配置,直接@Component加入容器中就可以了。
比如我们在访问之前的 http://localhost:9002/test/lb ,控制台就会打印我们在过滤器中打印的内容,说明进入到了过滤器中。关于“SpringCloud Gateway2020.0.2最新版本使用分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。
这篇文章主要介绍“前端中如何使用canvas绘制太极图”的相关知识,小编通过实际案例向大家展免费云主机域名示操作过程,操作方法简单快捷,实用性强,希望这篇“前端中如何使用canvas绘制太极图”文章能帮助大家解决问题。css样式代码:javascript代码:…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。