SpringCloud gateway 元数据,超时,Netty Access Logs

元数据

spring:
cloud:
gateway:
routes:
- id: route_with_metadata
uri: https://example.org
metadata:
optionName: "OptionValue"
compositeObject:
name: "value"
iAmNumber: 1

可通过ServerWebExchange获取:

Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
route.getMetadata();
route.getMetadata(someKey);

超时

要配置全局http超时:
connect-timeout必须以毫秒为单位指定。
response-timeout必须指定为java.time.Duration。

spring:
cloud:
gateway:
enabled: true
routes:
- id: Goods-Server # 路由 id,唯一标识
uri: lb://producer
predicates:
# - Path=/** # 断言,路由匹配条件,匹配 /product 开头的所有 api
- Path=/producer/{segment}
filters:
- StripPrefix=1
metrics:
tags:
path:
enabled: true
enabled: true
httpclient:
connect-timeout: 1000
response-timeout: 1s

修改Producer模块的Controller:

@RequestMapping("/hello")
public String hello(String name, HttpServletRequest request, HttpServletResponse response) {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return "hello," + name + "," + port;
}

访问 http://localhost:8500/producer/hello ,看到:

要配置每个路由超时:
connect-timeout必须以毫秒为单位指定。
response-timeout必须以毫秒为单位指定。

spring:
cloud:
gateway:
enabled: true
routes:
- id: Goods-Server # 路由 id,唯一标识
uri: lb://producer
predicates:
# - Path=/** # 断言,路由匹配条件,匹配 /product 开头的所有 api
- Path=/producer/{segment}
filters:
- StripPrefix=1
metadata:
response-timeout: 200
connect-timeout: 200

修改Producer模块的Controller:

@RequestMapping("/hello")
public String hello(String name, HttpServletRequest request, HttpServletResponse response) {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return "hello," + name + "," + port;
}

访问 http://localhost:8500/producer/hello ,看到:

Netty Access Logs

要启用Reactor Netty访问日志,请设置-Dreaactor.Netty.http.server.accessLogEnabled=true。必须是Java System Property, 不能是Spring Boot property。

在Resources加入 logback.xml文件:









%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n






${LOG_HOME}/log.%d{yyyy-MM-dd}.%i.log
1000MB
60



%d{yyyy-MM-dd HH:mm:ss.SSS} - [%thread] %-5level %logger{50} -%msg%n










启动GatewayServer是加入JVM属性:-Dreactor.netty.http.server.accessLogEnabled=true。访问 http://localhost:8500/producer/hello ,从控制台看到:

2023-05-07 13:35:41.625 INFO 43318 --- [or-http-epoll-2] reactor.netty.http.server.AccessLog : 0:0:0:0:0:0:0:1%0 - - [07/5月/2023:13:35:41 +0800] "GET /producer/hello HTTP/1.1" 200 15 257

posted @ 2023-05-07 13:36  shigp1  阅读(784)  评论(0)    收藏  举报