文章目录
- 全部详细路由信息
- 查询路由过滤器
- 全局过滤器
- 网关路线过滤器
- 刷新路由缓存
- 查询网关中定义的路由
- 查询有关特定路线的信息
- 创建和删除特定路由
- [Spring Cloud 相关系列文章目录]()
- 网关服务
- Spring Cloud Gateway
本文Spring Cloud Gateway 版本:2020.0.0
Spring Cloud Gateway添加Spring Boot Actuator( spring-boot-starter-actuator )的依赖,并将 gateway 端点暴露,即可获得若干监控端点,监控 & 操作Spring Cloud Gateway的方方面面。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
官网地址:https://cloud.spring.io/spring-cloud-gateway/reference/html/#actuator-api
/gateway为默认端点,您可以监视和交互Spring Cloud Gateway应用。为了可远程访问,必须在应用程序属性中通过HTTP或JMX启用和公开端点。以下清单显示了如何执行此操作:
配置文件:
management.endpoint.gateway.enabled=true # default value
management.endpoints.web.exposure.include=gateway # 暴露gateway端点,* 是暴露全部端点
所有网关相关监控端点列表如下:
以下所有端点都挂在/actuator/gateway/ 下面。 例如:routes 的全路径是 /actuator/gateway/routes ,以此类推。
ID | HTTP Method | Description |
| GET | 展示所有的全局过滤器 |
| GET | 展示所有的过滤器工厂(GatewayFilter factories) |
| POST【无消息体】 | 清空路由缓存 |
| GET | 展示路由列表 |
| GET | 展示指定id的路由的信息 |
| POST【消息体如下】 | 新增一个路由 |
| DELETE【无消息体】 | 删除一个路由 |
其中,要想动态添加路由配置,只需发送POST请求,消息体如下:
{
"predicates": [
{
"name": "Path",
"args": {
"_genkey_0": "/test"
}
}
],
"filters": [
{
"name": "AddRequestHeader",
"args": {
"_genkey_0": "X-Request-Foo",
"_genkey_1": "Bar"
}
},
{
"name": "PreLog",
"args": {
"_genkey_0": "a",
"_genkey_1": "b"
}
}
],
"uri": "https://www.itmuch.com",
"order": 0
}
TIPS
技巧:消息体其实是有规律的,你可以先在配置文件中配置一个路由规则,然后访问 ${GATEWAY_URL}/actuator/gateway/routes 端点,每个路由id的对应段落,就是你的消息体啦。
如果没有实时生效,使用refresh端点刷新一下路由信息即可。
全部详细路由信息
它为每个路由添加了更多详细信息,使您可以查看与每个路由关联的谓词和过滤器以及任何可用的配置。以下示例进行配置/actuator/gateway/routes:
[
{
"predicate": "(Hosts: [**.] && Paths: [/headers], match trailing slash: true)",
"route_id": "add_request_header_test",
"filters": [
"[[AddResponseHeader X-Response-Default-Foo = 'Default-Bar'], order = 1]",
"[[AddRequestHeader X-Request-Foo = 'Bar'], order = 1]",
"[[PrefixPath prefix = '/httpbin'], order = 2]"
],
"uri": "lb://testservice",
"order": 0
}
]
默认情况下启用此功能。要禁用它,请设置以下属性:
spring.cloud.gateway.actuator.verbose.enabled=false
查询路由过滤器
本节详细介绍如何检索路由过滤器,包括:
- 全局过滤器
- [网关路由过滤器]
全局过滤器
要检索应用于所有路由的全局过滤器,GET请向发出请求/actuator/gateway/globalfilters。产生的响应类似于以下内容:
{
"org.springframework.cloud.gateway.filter.LoadBalancerClientFilter@77856cc5": 10100,
"org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter@4f6fd101": 10000,
"org.springframework.cloud.gateway.filter.NettyWriteResponseFilter@32d22650": -1,
"org.springframework.cloud.gateway.filter.ForwardRoutingFilter@106459d9": 2147483647,
"org.springframework.cloud.gateway.filter.NettyRoutingFilter@1fbd5e0": 2147483647,
"org.springframework.cloud.gateway.filter.ForwardPathFilter@33a71d23": 0,
"org.springframework.cloud.gateway.filter.AdaptCachedBodyGlobalFilter@135064ea": 2147483637,
"org.springframework.cloud.gateway.filter.WebsocketRoutingFilter@23c05889": 2147483646
}
该响应包含已到位的全局筛选器的详细信息。对于每个全局过滤器,都有一个过滤器对象的字符串表示形式(例如org.springframework.cloud.gateway.filter.LoadBalancerClientFilter@77856cc5)和过滤器链中的相应顺序。}
网关路线过滤器
要检索应用于路线的GatewayFilter,GET请向发出请求/actuator/gateway/routefilters。产生的响应类似于以下内容:
{
"[AddRequestHeaderGatewayFilterFactory@570ed9c configClass = AbstractNameValueGatewayFilterFactory.NameValueConfig]": null,
"[SecureHeadersGatewayFilterFactory@fceab5d configClass = Object]": null,
"[SaveSessionGatewayFilterFactory@4449b273 configClass = Object]": null
}
该响应包含GatewayFilter应用于任何特定路线的工厂的详细信息。对于每个工厂,都有一个对应对象的字符串表示形式(例如[SecureHeadersGatewayFilterFactory@fceab5d configClass = Object])。请注意,该null值是由于端点控制器的实现不完整所致,因为它试图设置对象在过滤器链中的顺序,而该顺序不适用于GatewayFilter工厂对象。
刷新路由缓存
要清除路由缓存,POST请向发送请求/actuator/gateway/refresh。该请求返回200,但没有响应正文。
查询网关中定义的路由
要检索网关中定义的路由,GET请向发出请求/actuator/gateway/routes。产生的响应类似于以下内容:
[{
"route_id": "first_route",
"route_object": {
"predicate": "org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory$$Lambda$432/1736826640@1e9d7e7d",
"filters": [
"OrderedGatewayFilter{delegate=org.springframework.cloud.gateway.filter.factory.PreserveHostHeaderGatewayFilterFactory$$Lambda$436/674480275@6631ef72, order=0}"
]
},
"order": 0
},
{
"route_id": "second_route",
"route_object": {
"predicate": "org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory$$Lambda$432/1736826640@cd8d298",
"filters": []
},
"order": 0
}]
该响应包含网关中定义的所有路由的详细信息。下表描述了响应的每个元素的结构:
Path | Type | Description |
| String | The route ID. |
| Object | The route predicate. |
| Array | The GatewayFilter applied to the route. |
| Number | The route order. |
查询有关特定路线的信息
要检索有关一条路线的信息,GET请向发出请求/actuator/gateway/routes/{id}(例如/actuator/gateway/routes/first_route)。产生的响应类似于以下内容:
{
"id": "first_route",
"predicates": [{
"name": "Path",
"args": {"_genkey_0":"/first"}
}],
"filters": [],
"uri": "https://",
"order": 0
}]
下表描述了响应的结构:
路径 | 类型 | 描述 |
| String | 路由ID。 |
| Array | 路由谓词的集合。每个项目都定义给定谓词的名称和自变量。 |
| Array | 应用于路线的过滤器集合。 |
| String | 路由的目标URI。 |
| Number | 路由顺序。 |
创建和删除特定路由
要创建路由,POST请/gateway/routes/{id_route_to_create}使用JSON主体发出请求,以指定路由的字段(请参阅检索有关特定路由的信息)。
要删除路线,DELETE请向发出请求/gateway/routes/{id_route_to_delete}。