执行器 API
/gateway
执行器端点允许您监控 Spring Cloud Gateway 应用程序并与之交互。为了远程访问,该端点必须在应用程序属性中被启用并通过 HTTP 或 JMX 暴露。以下列表显示了如何配置:
management.endpoint.gateway.enabled=true # default value
management.endpoints.web.exposure.include=gateway
此端点提供子执行器端点上可用内容以及每个引用的可用方法的概述。生成的响应类似于以下内容:
[
{
"href":"/actuator/gateway/",
"methods":[ "GET" ]
},
{
"href":"/actuator/gateway/routedefinitions",
"methods":[ "GET" ]
},
{
"href":"/actuator/gateway/globalfilters",
"methods":[ "GET" ]
},
{
"href":"/actuator/gateway/routefilters",
"methods":[ "GET" ]
},
{
"href":"/actuator/gateway/routes",
"methods":[ "POST", "GET" ]
},
{
"href":"/actuator/gateway/routepredicates",
"methods":[ "GET" ]
},
{
"href":"/actuator/gateway/refresh",
"methods":[ "POST" ]
},
{
"href":"/actuator/gateway/routes/route-id-1/combinedfilters",
"methods":[ "GET" ]
},
{
"href":"/actuator/gateway/routes/route-id-1",
"methods":[ "POST", "DELETE", "GET" ]
}
]
详细执行器格式
Spring Cloud Gateway 中添加了一种新的、更详细的格式。它为每个路由添加了更多细节,让您可以查看与每个路由关联的谓词和过滤器以及任何可用配置。以下示例配置 /actuator/gateway/routes
:
[
{
"predicate": "(Hosts: [**.addrequestheader.org] && 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
在未来的版本中,此设置将默认为 true
。
获取路由过滤器
本节详细介绍如何获取路由过滤器,包括:
全局过滤器
要获取应用于所有路由的全局过滤器,请向 /actuator/gateway/globalfilters
发送 GET
请求。生成的响应类似于以下内容:
{ "org.springframework.cloud.gateway.filter.ReactiveLoadBalancerClientFilter@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.ReactiveLoadBalancerClientFilter@77856cc5
)以及在过滤器链中的对应顺序。
路由过滤器
要获取应用于路由的GatewayFilter
工厂,请向 /actuator/gateway/routefilters
发送 GET
请求。生成的响应类似于以下内容:
{ "[AddRequestHeaderGatewayFilterFactory@570ed9c configClass = AbstractNameValueGatewayFilterFactory.NameValueConfig]": null, "[SecureHeadersGatewayFilterFactory@fceab5d configClass = Object]": null, "[SaveSessionGatewayFilterFactory@4449b273 configClass = Object]": null }
响应包含应用于任何特定路由的 GatewayFilter
工厂的详细信息。对于每个工厂,都有相应对象的字符串表示(例如,[SecureHeadersGatewayFilterFactory@fceab5d configClass = Object]
)。请注意,null
值是由于端点控制器实现不完整造成的,因为它试图设置对象在过滤器链中的顺序,但这不适用于 GatewayFilter
工厂对象。
刷新路由缓存
要清除路由缓存,请向 /actuator/gateway/refresh
发送 POST
请求。请求将返回 200 状态码,但不带响应体。
要清除具有特定元数据值的路由,请添加查询参数 metadata
,指定要清除的路由应匹配的 key:value
对。如果在异步刷新期间发生错误,刷新将不会修改现有路由。
向 /actuator/gateway/refresh?metadata=group:group-1
发送 POST
请求将只刷新其 group
元数据为 group-1
的路由:first_route
和 third_route
。
[{
"route_id": "first_route",
"route_object": {
"predicate": "...",
},
"metadata": { "group": "group-1" }
},
{
"route_id": "second_route",
"route_object": {
"predicate": "...",
},
"metadata": { "group": "group-2" }
},
{
"route_id": "third_route",
"route_object": {
"predicate": "...",
},
"metadata": { "group": "group-1" }
}]
获取网关中定义的路由
要获取网关中定义的路由,请向 /actuator/gateway/routes
发送 GET
请求。生成的响应类似于以下内容:
[{ "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 }]
响应包含网关中定义的所有路由的详细信息。下表描述了响应中每个元素(每个元素都是一个路由)的结构:
路径 | 类型 | 描述 |
---|---|---|
|
String |
路由 ID。 |
|
Object |
路由谓词。 |
|
Array |
应用于路由的 |
|
Number |
路由顺序。 |
获取特定路由的信息
要获取单个路由的信息,请向 /actuator/gateway/routes/{id}
发送 GET
请求(例如,/actuator/gateway/routes/first_route
)。生成的响应类似于以下内容:
{ "id": "first_route", "predicates": [{ "name": "Path", "args": {"_genkey_0":"/first"} }], "filters": [], "uri": "https://www.uri-destination.org", "order": 0 }
下表描述了响应的结构:
路径 | 类型 | 描述 |
---|---|---|
|
String |
路由 ID。 |
|
Array |
路由谓词的集合。每个项定义给定谓词的名称和参数。 |
|
Array |
应用于路由的过滤器集合。 |
|
String |
路由的目标 URI。 |
|
Number |
路由顺序。 |
创建和删除特定的路由定义
要创建路由定义,请向 /gateway/routes/{id_route_to_create}
发送带 JSON 请求体的 POST
请求,该请求体指定路由的字段(参见获取特定路由的信息)。
要删除路由定义,请向 /gateway/routes/{id_route_to_delete}
发送 DELETE
请求。
创建多个路由定义
要在单个请求中创建多个路由定义,请向 /gateway/routes
发送带 JSON 请求体的 POST
请求,该请求体指定路由的字段,包括路由 ID(参见获取特定路由的信息)。
如果在路由创建过程中发生任何错误,路由定义将被丢弃。
总结:所有端点列表
下表总结了 Spring Cloud Gateway 执行器端点(请注意,每个端点的基本路径都是 /actuator/gateway
):
ID | HTTP 方法 | 描述 |
---|---|---|
|
GET |
显示应用于路由的全局过滤器列表。 |
|
GET |
显示应用于特定路由的 |
|
POST |
清除路由缓存。 |
|
GET |
显示网关中定义的路由列表。 |
|
GET |
显示特定路由的信息。 |
|
POST |
向网关添加新路由。 |
|
DELETE |
从网关中移除现有路由。 |