`

Spring Cloud推出新成员Spring Cloud Gateway

阅读更多

当传统的服务(例如数据库、消息队列、搜索引擎)在Cloud Foundry生态系统中广泛的应用和交易,有两种你可能不知道的服务发现方式。卷(Volume)服务[1]允许你做一个持久挂载的系统到你的应用。路由服务[2]允许拦截到你应用的所有HTTP流量。

路由服务

路由服务可以被用于很多目的,例如日志、限流、认证,从而做到应用无感知。

首先,让我们了解一下路由服务的工作原理。当路由服务绑定到应用,路由器将拦截到应用的所有请求,添加一些HTTP头以及保证请求完整性的签名,并将请求路由到对应服务(或者修改URL,或者仅仅返回一个错误的响应)。路由服务能做的事情请查看路由服务文档。

简单日志服务

这一节,我们学习如何使用Spring Cloud团队推出的API网关Spring Cloud Gateway构建一个简单的路由服务。这是一个简单的服务,它仅仅在日志中记录请求的详细信息,然后将请求转发到目标地址(类似路由服务文档中的Spring Boot实例[3])。

创建项目

首先,创建一个新的Spring项目。你必须保证使用Spring Boot 2.x版本(当前最新版本2.0.0 RC1),并且包含Gateway和Reactive Web的依赖。在这个例子中,我根据自己的偏爱使用Gradle,当然你也可以使用Maven。

路由谓词

接下来,我们需要设置网关路由,用于处理请求。如路由服务文档在Headers部分提到的,这里有3个header用于标识一个路由服务请求:

  • X-CF-Forwarded-Url:请求的目标URL

  • X-CF-Proxy-Signatur:验证请求用的token

  • X-CF-Proxy-Metadata:解析和验证X-CF-Proxy-Signature的帮助信息

上面这个Spring Cloud Gateway路由服务围绕谓词构建。在这个例子中,有3个基于Predicate的简单Header。如果一个请求,这3个谓词全都匹配,那我们转发该请求到http://google.com:80(很明显真实的场景不能这么做,后面我们将使用filter更新目标地址)。我们使用./gradlew bootRun命令启动服务,并且使用http客户端验证服务是否正常工作。

如你所见,路由服务处理了这3个Header,并且如我们所期待的将请求转发到google了(google返回了301作为响应)。

日志Filter

接下来,我们构建一个简单的Filter,用于记录进来的请求的一些信息。

最后调用chain.filter(exchange),表明这个Filter已经处理完成,并且将请求传给Filter链中的下一个Filter进行处理,或者如果这是链中最后一个Filter,则对请求放行。接下来,我们需要确保当路由服务处理请求时会调用Filter。

如你所见,我们使用filters()方法增加了日志过滤器。f是GatewayFilterSpec[4]类的实例,包含了常用filters的简便方法,例如添加Header、转发,或者开启Hystrix[5]。

如果我们使用HTTP客户端再次测试,我们将看到我们日志中的详细信息:

转发到目标URL

最后,我们需要确保请求被转发到了目标URI,而不是google。我们能使用另外的Filter完成这个目的。

这个值从X-CF-Forwarded-Url中获取,并且存储在Spring Cloud Gateway的特殊属性中,用于发送最终的请求。如果产生了异常,网关将停止处理请求,并且返回一个500。注意,和其他类型的路由服务一样,这是用于拒绝请求的通用模式。如果你需要拒绝请求,你可以仅仅返回500状态码,同时停止处理请求。

现在,在路由中写一个新的Filter:

ROUTE_TO_URL_FILTER_ORDER是一个常量,表明RouteToRequestUrlFilter类型的Filter在运行。我们需要确保我们前面定义的Filter 在它之后运行,这样我们的GATEWAY_REQUEST_URL_ATTR就不会被覆盖。另外,你可能要注意,我们从f.add换成了f.filter。这是因为当前版本的Spring Cloud Gateway不允许通过add方法进行设置。

我们通过HTTP客户端再验证一次:

注意,我们通过X-CF-Forwarded-Url的Header属性使用reddit替换掉了google。

部署

到这里,路由服务就可以部署了。你应该构建应用(Gradle用户使用./gradlew build命令),参照路由服务文档中的教程[6]部署。

总结

Spring Cloud Gateway刚出来不是很久,但是对于那些想在Cloud Foundry应用前面做一层处理的Java开发者来说,是非常有用的选择。如果你想看简单路由服务的最终源代码,在这里[7]。另外,有必要看看Spring Gloud Gateway的文档,包含了很多当前教程没有提到的有用的谓词和Filter。

 

文中链接

 

[1] https://docs.cloudfoundry.org/devguide/services/using-vol-services.html

[2] https://docs.cloudfoundry.org/services/route-services.html

[3] https://github.com/nebhale/route-service-example

[4] https://github.com/spring-cloud/spring-cloud-gateway/blob/v2.0.0.M6/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java

[5] https://github.com/Netflix/Hystrix

[6] https://docs.cloudfoundry.org/services/route-services.html#tutorial

[7] https://github.com/Fitzoh/simple-gateway-route-service

 

本文作者Andrew Fitzgerald,由邓启明翻译

 

https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653549994&idx=1&sn=5e8b7479dda44ce4376df435682c73b0&chksm=813a6432b64ded24f00f6e351ab62ae0c7d41d583a4fb5ac168d7d919e4fcff8506f8e5c0731&mpshare=1&scene=1&srcid=0725iWhTXnZxH3lTsqEF87dF#rd

分享到:
评论

相关推荐

    最新Spring Cloud Gateway 官方参考指南-中文版-3.x

    Spring Cloud Gateway 是一款基于Spring生态系统构建的API网关,它主要设计用于提供一种简单而有效的方式来路由API,并为API提供核心关注点,如安全性、监控/度量和弹性。在3.1.3版本中,它利用了Spring Boot 2.x、...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...

    springcloud下通过gateway转发websocket

    在IT行业中,Spring Cloud Gateway作为Spring Cloud生态体系中的一个关键组件,被广泛用于构建微服务架构中的API网关。这个框架允许我们集中处理各种请求,包括路由、过滤、安全等,极大地简化了服务间的通信。而...

    springcloud Gateway网关-压测用.zip

    SpringCloud Gateway作为一款现代化的微服务网关,它在企业级分布式系统中扮演着至关重要的角色。这个名为"springcloud Gateway网关-压测用.zip"的压缩包包含了一个用于性能测试的配置,目的是评估和优化Gateway的...

    Spring Cloud Gateway的全局异常处理

    ### Spring Cloud Gateway全局异常处理详解 #### 一、引言 在微服务架构中,网关作为服务入口,承担着路由转发、限流熔断、鉴权认证等职责。Spring Cloud Gateway作为一款基于Spring Framework 5、Project Reactor...

    springcloud gateway 全局过滤器统一签名判定.doc

    在Spring Cloud Gateway中,全局过滤器(Global Filter)是一种强大的机制,用于在请求路由到具体的服务之前或之后执行通用的处理逻辑。在这个场景中,我们关注的是如何利用全局过滤器来实现统一的签名验证,这在...

    Spring Cloud Eureka + Spring Cloud Gateway + Spring Cloud Zipkin

    项目中包含的SpringCloud中文文档将为开发者提供详细的指导,帮助他们理解和使用这些组件。文档通常会涵盖安装配置、基本使用、高级特性以及最佳实践等内容,是学习和实施微服务架构的重要参考资料。 总之,Spring ...

    spring cloud zookeeper gateway

    Spring Cloud Gateway是Spring Cloud生态中的一个新组件,它是Spring Cloud的下一代API网关。它的主要功能包括路由转发、过滤器链处理、动态路由、熔断、限流等。作为一个高性能、易用的API网关,Spring Cloud ...

    详解SpringCloud Finchley Gateway 统一异常处理

    详解 SpringCloud Finchley Gateway 统一异常处理 SpringCloud Finchley Gateway 统一异常处理是指在使用 SpringCloud Finchley 版本的 Gateway 时,如何统一处理系统级异常的方法。默认情况下,SpringCloud ...

    spring cloud gateway配置Hystrix 熔断、限流、后台调用注意点.pdf

    Spring Cloud Gateway 配置 Hystrix 熔断、限流、后台调用注意点 Spring Cloud Gateway 是一种基于 Spring Boot 框架的 API 网关解决方案,提供了许多实用的功能来管理和保护微服务架构中的 API。其中,Hystrix ...

    SpringCloud.03.网关Gateway 配置文件

    在Spring Cloud生态体系中,Spring Cloud Gateway作为新一代的API网关,被广泛应用于微服务架构中,用于统一处理请求路由、过滤器链、限流、熔断等核心功能。本篇将详细介绍Spring Cloud Gateway的配置文件相关知识...

    Spring Cloud Gateway 2.1 使用手册中文版.pdf

    这个项目提供了一个构建在 Spring 生态系统之上的 API 网关,包括:Spring 5,Spring ... Spring Cloud Gateway 旨在提供一种简单而有效的 API 路 由方式,并为其提供横切关注点,例如:安全,监控/指标和弹性。

    spring-cloud-gateway-server-3.1.1-API文档-中文版.zip

    赠送jar包:spring-cloud-gateway-server-3.1.1.jar; 赠送原API文档:spring-cloud-gateway-server-3.1.1-javadoc.jar; 赠送源代码:spring-cloud-gateway-server-3.1.1-sources.jar; 赠送Maven依赖信息文件:...

    spring cloud gateway 例子

    Spring Cloud Gateway 是一款基于 Spring Framework 5 和 Spring Boot 2 设计的云原生微服务网关,它旨在提供一种简单而有效的方式来对 API 进行路由,同时提供了过滤器功能,可以进行权限验证、限流、日志记录等...

    spring-cloud-gateway-demo.zip

    Spring Cloud Gateway 是一款基于 Spring Framework 5 和 Spring Boot 2 设计的现代化微服务路由网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。在本示例 "spring-cloud-gateway-demo.zip" 中...

    Spring Cloud实战 _springcloud实战_springcloud_

    Spring Cloud Gateway是新一代的API网关,它替代了Zuul,提供了更强大的路由规则、过滤器等功能,能够更灵活地处理请求和响应。 此外,Spring Cloud OpenFeign是声明式服务调用的组件,简化了服务之间的调用,使得...

    spring-cloud-gateway-server-3.1.1-API文档-中英对照版.zip

    赠送jar包:spring-cloud-gateway-server-3.1.1.jar; 赠送原API文档:spring-cloud-gateway-server-3.1.1-javadoc.jar; 赠送源代码:spring-cloud-gateway-server-3.1.1-sources.jar; 赠送Maven依赖信息文件:...

    CVE-2022-22947-Spring-Cloud-Gateway 内存马POC

    Spring官方博客发布了一篇关于Spring Cloud Gateway的CVE报告,据公告描述,当启用和暴露 Gateway Actuator 端点时,使用 Spring Cloud Gateway 的应用程序可受到代码注入攻击。攻击者可以发送特制的恶意请求,从而...

    spring-cloud项目_springcloud_springcloud项目_springcloud_spring-clou

    9. **Spring Cloud Gateway**: Spring Cloud Gateway 是新一代的 API 网关,取代了 Zuul,提供更高效、更灵活的路由、过滤器等功能,同时具备更好的性能和扩展性。 10. ** Sleuth 和 Zipkin**: Sleuth 是一个分布式...

    spring cloud gateway跨域实现

    Spring Cloud Gateway 是Spring官方推出的一款现代化的网关服务,它构建于Spring Framework 5、Project Reactor 和 Spring Boot 2之上,提供了高性能、易用的API路由管理、过滤器等功能,是Spring Cloud生态中的重要...

Global site tag (gtag.js) - Google Analytics