Actuator API
/gateway 執行器端點允許您監視 Spring Cloud Gateway 應用程式並與其互動。`/gateway` 執行器端點預設停用訪問。要啟用該端點,您需要將訪問許可權設定為'read-only' 或 'unrestricted',並在應用程式屬性中透過 HTTP 或 JMX 公開它。以下清單顯示瞭如何操作
management.endpoint.gateway.access=read-only
management.endpoints.web.exposure.include=gateway
建議您將 management.endpoint.gateway.access 設定為 read-only。這將停用重新整理、建立和刪除路由的功能。如果您需要使用執行器端點建立、重新整理和刪除路由的功能,您需要將 management.endpoint.gateway.access 設定為 unrestricted 或設定 management.endpoint.gateway.enabled=true。如果您啟用透過執行器端點建立、刪除和重新整理路由的功能,您應該採取適當的步驟來確保您的執行器端點是安全的。 |
此端點提供了子執行器端點上可用的內容的概覽以及每個引用的可用方法。結果響應類似於以下內容
[
{
"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
}]
響應包含閘道器中定義的所有路由的詳細資訊。下表描述了響應中每個元素(每個元素都是一個路由)的結構
| 路徑 | 型別 | 描述 |
|---|---|---|
|
字串 |
路由 ID。 |
|
物件 |
路由謂詞。 |
|
陣列 |
應用於路由的 |
|
數字 |
路由順序。 |
檢索特定路由的資訊
要檢索單個路由的資訊,請向 /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
}
下表描述了響應的結構
| 路徑 | 型別 | 描述 |
|---|---|---|
|
字串 |
路由 ID。 |
|
陣列 |
路由謂詞的集合。每個項定義給定謂詞的名稱和引數。 |
|
陣列 |
應用於路由的過濾器集合。 |
|
字串 |
路由的目標 URI。 |
|
數字 |
路由順序。 |
建立和刪除特定路由定義
要建立路由定義,請向 /gateway/routes/{id_route_to_create} 發出 POST 請求,並附帶一個指定路由欄位的 JSON 正文(參見檢索特定路由的資訊)。
要刪除路由定義,請向 /gateway/routes/{id_route_to_delete} 發出 DELETE 請求。
建立多個路由定義
要在單個請求中建立多個路由定義,請向 /gateway/routes 發出 POST 請求,並附帶一個指定路由欄位(包括路由 ID)的 JSON 正文(參見檢索特定路由的資訊)。
如果在建立路由期間任何路由引發錯誤,則路由定義將被丟棄。
回顧:所有端點的列表
下表總結了 Spring Cloud Gateway 執行器端點(請注意,每個端點都以 /actuator/gateway 作為基本路徑)
| ID | HTTP 方法 | 描述 |
|---|---|---|
|
GET |
顯示應用於路由的全域性過濾器列表。 |
|
GET |
顯示應用於特定路由的 |
|
POST |
清除路由快取。 |
|
GET |
顯示閘道器中定義的路由列表。 |
|
GET |
顯示特定路由的資訊。 |
|
POST |
向閘道器新增新路由。 |
|
DELETE |
從閘道器中移除現有路由。 |