赞
踩
在微服务中,一般都会把相对独立的业务或者功能划分成一个独立的服务,做到业务或者功能之间的隔离,分开部署。但是在请求到这些正式的服务的时候一般会有一些预前的处理,比如:权限校验,流量控制,灰度发布等。如果这些都在各自的服务中去做,势必会增加这些基础功能的维护成本。总之就是需要有一种前置的组件去做公共的功能逻辑。
Spring Gateway 是 Spring Cloud 微服务生态下的网关组件,网络层使用了基于非阻塞的 Netty使用异步IO增加了系统的性能。Gateway 是基于 Spring 5 和 Spring Boot 2 搭建的,本质上是一个 Spring Boot 应用。
路由是 Gateway 的核心构件,不同的路由根据匹配条件可以处理不同类型的请求,并转发到对应的目标服务。一个路由由以下几个属性组成
Id: 路由 ID。
Uri: 转发请求的目标地址。
Order: 顺序(优先级)。
Predicate: 匹配条件。
Metadata: 额外的元数据。
多个 Predicates 会合并成一个聚合的条件。Filters: 路由过滤器。这些过滤器最终会和全局过滤器一起排序处理匹配成功的请求。
Spring Cloud Gateway 本身提供了很多 Predicate 和 Filter 的实现,一些基本的功能可以通过这些现成的 Predicate 和 Filter 配置实现。
4. 实操
代码配置:
@Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() //第一个配置 .route(r -> r.host("**.abc.org").and().path("/image/png") .filters(f -> f.addResponseHeader("X-TestHeader", "foobar")) .uri("http://foo.org:80") ) // 第二个配置 .route(r -> r.path("/image/webp") .filters(f -> f .addRequestHeader("X-TestHeader", "baz") .addRequestParameter("test-param", "value")) .uri("http://bar.org:80") .metadata("key", "value") ) .build(); }
配置文件配置
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: activity-route
uri: lb://activity
predicates:
- Path=/activity/**
filters:
- StripPrefix=1
注意: Gateway默认转发是全路径的,设置StripPrefix=1表示从二级url路径转发,即http://localhost:port/activity/test将会转发到http://{activity}/test
Spring Cloud Gateway 是 Spring Cloud 微服务生态中的 Gateway 组件。作为 Spring Cloud Zuul 的替代,Gateway 采用了性能的更高的 Netty 作为网络层服务器。Gateway 本身提供了很多常用的 Predicates 和 Filters 实现,能满足大部分常见需求。同时 Gateway 也支持 Spring Cloud 生态下其他组件如 Eureka 等的交互,使用起来非常方便。
https://blog.csdn.net/Extraordinarylife/article/details/115168526
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。