1. 网关Gateway的基本组成
- Route:路由是GateWay最基础的组件,它包含一个ID,一个目标Url,一些断言集合,一些过滤器集合;如果断言成功的话,路由器就会被匹配
- Predicate:输入类型是Spring Framework
ServerWebExchange
。这使您可以匹配HTTP请求中的所有内容,例如标头或参数。 - Filter:这些是使用特定工厂构造的Spring Framework
GatewayFilter
实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。
2. 工作原理
客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。该处理程序通过特定于请求的过滤器链运行请求。筛选器由虚线分隔的原因是,筛选器可以在发送代理请求之前和之后运行逻辑。所有“前置”过滤器逻辑均被执行。然后发出代理请求。发出代理请求后,将运行“后”过滤器逻辑。
3.Predicate的两种配置方式
-
快捷方式配置
快捷方式配置由过滤器名称识别,后跟一个等号(
=
),然后是由逗号分隔的参数值(,
)spring: cloud: gateway: routes: - id: after_route uri: https://example.org predicates: - Cookie=mycookie,mycookievalue
-
扩展方式配置
参数看起来更像带有名称/值对的标准Yaml配置。通常,将有一个
name
钥匙和一个args
钥匙,args
键是用于配置断言器或过滤器的键值对的映射spring: cloud: gateway: routes: - id: after_route uri: https://example.org predicates: - name: Cookie args: name: mycookie regexp: mycookievalue
-
properties 配置
server.port=8080 spring.application.name=api-gateway spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 #表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务。 spring.cloud.gateway.discovery.locator.enabled=true #是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了),比如以/service-hi/*的请求路径被路由转发到服务名为service-hi的服务上。 spring.cloud.gateway.discovery.locator.lower-case-service-id=true spring.cloud.gateway.routes[0].id=gateway-service spring.cloud.gateway.routes[0].uri=lb://service-provider spring.cloud.gateway.routes[0].predicates[0]=Path=/provider/**
4. Route Predicate Factories (路由断言工厂)
SpringCloudGateway将路由作为SpringWebFlux HandlerMapping基础设施的一部分进行匹配。SpringCloudGateway包含许多内置的路由断言工厂。所有这些断言都匹配HTTP请求的不同属性。可以将多个路由断言工厂与逻辑and语句组合在一起使用。
-
The After Route Predicate Factory
-
The Before Route Predicate Factory
-
The Between Route Predicate Factory
-
The Cookie Route Predicate Factory
-
The Header Route Predicate Factory
-
The Host Route Predicate Factory
-
The Method Route Predicate Factory
-
The Path Route Predicate Factory(基于请求路径的断言,也是用的最多一个)
今天的文章GateWay原理分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33272.html