Я создаю шлюз для своих сайтов и использую Spring-Cloud-Gateway. Я хочу записать некоторые временные метки в запросе, включая время поступления запроса в (1) , время отправки ответа (2) , а время до и после операции маршрута (3) .
Я могу получить (1) и (2) по следующему коду:
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
exchange.getAttributes().put(START_TIME, System.currentTimeMillis());
Mono<Void> mono = chain.filter(exchange);
return mono.then(Mono.fromRunnable(() -> {
ServerHttpRequest request = exchange.getRequest();
GatewayLog gatewayLog = new GatewayLog();
/** some codes of building the gatewayLog **/
String jsonMsg = JSON.toJSONString(gatewayLog);
mono.log(jsonMsg);
logger.info(jsonMsg);
}));
}
Но операция маршрута выполняется фильтром NettyRoutingFilter, и я не знаю, как получить отметку времени (3) с помощью WebFlux.
Могу ли я добавить метод в моно, который может выполняться, когда работает NettyRoutingFilter.filter ()?
Или у вас есть другие решения?