OpenTelemetry和Reactive Java:如何用返回值标记Mono

wmtdaxz3  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(100)

我正在尝试将Observability信息添加到方法中:

  1. @GetMapping(value = "/getClient")
  2. public Mono<ResponseEntity<String>> getClient(HttpServletRequest request, final ClientRequest body) {
  3. return myService
  4. .getClient(body.getClient_id(), body.getProvider())
  5. .doOnError(throwable -> log.error("Failed to get client", throwable))
  6. .name("get_client")
  7. .tag("client_id", body.getClient_id())
  8. .tag("provider", body.getProvider())
  9. .tap(Micrometer.observation(observationRegistry));
  10. }

这给了我一些额外的信息在我的痕迹和指标;一切正常。
但现在我也想知道这个调用是否成功,或者它是否包含错误。为此,我需要.tag(...).doOnError(...)的混合,但我找不到解决方案。如果我想添加有关myService.getClient结果的信息,我也会遇到同样的问题。
我这真的可能吗?

xqkwcwgp

xqkwcwgp1#

我找到了解决办法:

  1. ...
  2. .doOnError(throwable -> observationRegistry.getCurrentObservation().event(Observation.Event.of("Error", "Whatever"));
  3. .map(result -> observationRegistry.getCurrentObservation().event(Observation.Event.of("Success", "Whatever")
  4. ...

相关问题