【发布时间】:2019-08-04 04:08:24
【问题描述】:
环境:Springboot-2.0.7.RELEASE(嵌入式 tomcat-8.5.35)、JDK-1.8.0_181、micrometer-registry-prometheus-1.0.8
描述:在控制器方法上使用 @Timed,在自定义 WebMvcTagsProvider 上使用 WebMvcMetricsFilter。
演示项目:https://github.com/kenix/resp-mix
如果PrometheusMeterRegistry 已经创建了一个带有一组标签的仪表,它不会创建另一个具有相同名称和一组不同标签的仪表。由于上述原因,它会抛出IllegalArgumentException。这发生在请求的正常处理成功之后(响应现在具有转换后的 JSON)。异常没有在spring的WebMvcMetricsFilter中捕获(即在其catch子句中捕获异常。顺便说一句,ControllerAdvice没有帮助),但被tomcat的StandardHostValve捕获,它呈现了他自己的错误消息(它不知道这个异常来自哪里)也响应。这会导致呈现的结果是非法的 JSON。
问题 1:WebMvcMetricsFilter 是否应该捕获并处理 PrometheusMeterRegistry 抛出的这个异常,而不是进一步抛出?
问题 2:已经看到过滤器链中的异常在实际处理之前按预期处理。实际处理成功后的异常呢?有参考吗?
触发这种情况:
curl -i localhost:8080/hi/foo/therecurl -i localhost:8080/hi/blah/there
【问题讨论】:
标签: servlet-filters spring-boot-actuator spring-micrometer