Spring RestController 响应与 PrometheusMeterRegistry 错误消息混合



Env: Springboot-2.0.7.RELEASE (embedded tomcat-8.5.35), JDK-1.8.0_181, micrometer-registry-prometheus-1.0.8

描述:在控制器上使用@Timed方法,WebMvcMetricsFilter自定义WebMvcTagsProvider

演示项目:https://github.com/kenix/resp-mix

如果PrometheusMeterRegistry已创建具有一组标签的计量,则不会创建另一个具有相同名称和一组不同标签的计量。它抛出了上述原因IllegalArgumentException。这发生在请求的正常处理之后,这是成功的(响应现在具有转换后的 JSON)。在 Spring 的WebMvcMetricsFilter中没有捕获异常(即在其catch-子句中捕获异常。顺便说一句,ControllerAdvice没有帮助),但被 tomcat 的StandardHostValve捕获,这也将他自己的错误消息(它不知道此异常来自哪里)呈现为响应。这会导致非法的 JSON 作为呈现的结果。

问题 1:WebMvcMetricsFilter是否应该捕获并处理PrometheusMeterRegistry抛出的异常,而不是进一步抛出它?

问题 2:在遇到实际处理之前,过滤器链中的异常已按预期处理。实际处理成功后出现异常怎么办?有什么参考资料吗?

要触发此情况,请执行以下操作:

  1. curl -i localhost:8080/hi/foo/there
  2. curl -i localhost:8080/hi/blah/there

问题 1:不,WebMvcTagsProvider 处理 HTTP 异常。 问题 2:尝试使用 ControllerAdvice 并在那里捕获 IllegalArgumentException。

相关内容

最新更新