💨 作者:
laker
,因为喜欢LOL滴神faker
,又是NBA湖人队🏀(laker
)粉丝儿(主要是老詹的粉丝儿),本人又姓李,故取笔名:laker
❤️喜欢分享自己工作中遇到的问题和解决方案,以及一些读书笔记和心得分享。
🌰本人创建了微信公众号【Java大厂面试官】,用于和大家交流分享
🏰 个人微信【lakernote】,加作者备注下暗号:cv之道
。
文章目录
本文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 |
---|---|---|
globalfilters | GET | 展示所有的全局过滤器 |
routefilters | GET | 展示所有的过滤器工厂(GatewayFilter factories) |
refresh | POST【无消息体】 | 清空路由缓存 |
routes | GET | 展示路由列表 |
routes/{id} | GET | 展示指定id的路由的信息 |
routes/{id} | POST【消息体如下】 | 新增一个路由 |
routes/{id} | 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: [**.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
查询路由过滤器
本节详细介绍如何检索路由过滤器,包括:
全局过滤器
要检索应用于所有路由的全局过滤器,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 |
---|---|---|
route_id | String | The route ID. |
route_object.predicate | Object | The route predicate. |
route_object.filters | Array | The GatewayFilter factories applied to the route. |
order | 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://www.uri-destination.org",
"order": 0
}]
下表描述了响应的结构:
路径 | 类型 | 描述 |
---|---|---|
id | String | 路由ID。 |
predicates | Array | 路由谓词的集合。每个项目都定义给定谓词的名称和自变量。 |
filters | Array | 应用于路线的过滤器集合。 |
uri | String | 路由的目标URI。 |
order | Number | 路由顺序。 |
创建和删除特定路由
要创建路由,POST
请/gateway/routes/{id_route_to_create}
使用JSON主体发出请求,以指定路由的字段(请参阅检索有关特定路由的信息)。
要删除路线,DELETE
请向发出请求/gateway/routes/{id_route_to_delete}
。
参考:
http://www.itmuch.com/spring-cloud-gateway/spring-cloud-gateway-actuator/
Spring Cloud 相关系列文章目录
网关服务
Spring Cloud Gateway
QQ群【837324215】
关注我的公众号【Java大厂面试官】,回复:常用工具、资源等关键词(更多关键词,关注后注意提示信息)获取更多免费资料。
公众号也会持续输出高质量文章,和大家共同进步。