预过滤器
创建一个名为 TrackingFilter 的过滤器,它将检查所有传入网关的请求,并确定请求中是否存在一个名为 tmx-correlation-id 的HTTP头。tmx-correlation-id 头将包含一个唯一的全局标识符(GUID),可用于跟踪用户在多个微服务之间的请求。如果HTTP头中不存在tmx-correlation-id,TrackingFilter 将生成并设置关联ID。
要在Spring Cloud Gateway中创建全局过滤器,我们需要实现 GlobalFilter 类,然后覆盖 filter() 方法。这个方法包含了过滤器实现的业务逻辑。
@Log4j2
@Order(1)
@Component
public class TrackingFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String correlationID = FilterUtils.getCorrelationId(
exchange.getRequest().getHeaders());
if (correlationID == null) {
correlationID = generateCorrelationId();
exchange = FilterUtils.setCorrelationId(exchange, correlationID);
log.debug("tmx-correlation-id generated in tracking filter: {}.",
correlationID);
} else {
log.debug("tmx-correlation-id found in tracking filter: {}. ",
correlationID);
}
return chain.filter(exchange);
}
private String generateCorrelationId() {
return UUID.randomUUID().toString();
}
}我们已经实现了一个名为 FilterUtils 的类,该类封装了所有过滤器共用的常见功能。
为了测试这个调用,我们可以调用我们的 organization 或 licensing 服务:
一旦调用被提交,我们应该在控制台中看到一个日志消息,该消息会在流经过滤器时输出传入的关联ID:
如果在控制台上看不到消息,只需将以下清单中显示的代码行添加到网关服务器的 application.yml 配置文件中:
Last updated