Spring Boot 3.0.1+版本MetricsWebClientFilterFunction失效求替代方案
Spring Boot 3.0.1+ 适配WebClient指标收集方案
在Spring Boot 3.x版本中,MetricsWebClientFilterFunction已被移除,官方改用基于Micrometer Observation API的ObservationWebClientFilterFunction来实现WebClient请求的指标收集,以下是适配步骤:
核心替换方案
直接用ObservationWebClientFilterFunction替代旧类,调整初始化逻辑:
import io.micrometer.observation.ObservationRegistry; import org.springframework.web.filter.reactive.ObservationWebClientFilterFunction; import org.springframework.boot.actuate.autoconfigure.metrics.AutoTimeProperties; // 注入或获取已配置的ObservationRegistry实例 ObservationRegistry observationRegistry = ...; // 初始化观测过滤器,指定指标名称和自动计时配置 ObservationWebClientFilterFunction metricsFilter = new ObservationWebClientFilterFunction( observationRegistry, "packetExtractorMetrics", new AutoTimeProperties() ); // 将过滤器添加到WebClient构建器 WebClient webClient = WebClient.builder() .filter(metricsFilter) .build();
自定义扩展(可选)
如果需要对指标标签、观测逻辑做自定义扩展,可以实现ObservationConvention接口:
import io.micrometer.observation.ObservationConvention; import io.micrometer.observation.transport.RequestReplySenderContext; import org.springframework.http.client.reactive.ClientHttpRequest; import org.springframework.http.client.reactive.ClientHttpResponse; public class CustomClientObservationConvention implements ObservationConvention<RequestReplySenderContext<ClientHttpRequest, ClientHttpResponse>> { @Override public String getName() { return "packetExtractorMetrics"; } // 重写其他方法自定义标签、描述等 @Override public String getContextualName(RequestReplySenderContext<ClientHttpRequest, ClientHttpResponse> context) { return context.getRequest().getURI().getPath(); } }
然后修改过滤器初始化代码:
ObservationWebClientFilterFunction metricsFilter = new ObservationWebClientFilterFunction( observationRegistry, new CustomClientObservationConvention(), new AutoTimeProperties() );
说明
Spring Boot 3.x基于Spring Framework 6.x,全面切换到Micrometer Observation API统一处理指标和追踪,旧的MetricsWebClientFilterFunction因API迭代被移除。ObservationWebClientFilterFunction会自动收集请求耗时、状态码、请求URI等核心指标,完全覆盖旧类的功能,同时支持更灵活的扩展能力。
内容的提问来源于stack exchange,提问作者Kiran Mekala
相关产品推荐
相关产品推荐

