@Timed на реактивной конечной точке quarkus не дает правильного времени отклика

Ниже моя конечная точка.

          @Path("/data")
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    @Timed("rest.request.timer")
    public Multi<***> getData(***) {
        \\ app logic
    return x;
    }
    

Micrometer по умолчанию измеряет HTTP-запросы, а http_server_requests_seconds_sum дает правильное значение того, сколько времени требуется для ответа на запрос.

Я добавил пользовательскую метрику в метод с аннотацией @Timed, я ожидаю, что значение этой метрики будет таким же, как уhttp_server_requests_seconds_sum, но они не одинаковы.

Я также попытался записать время, затраченное без аннотации, как показано ниже, но значения не совпадают. Любая подсказка, почему они не одинаковы?

      
Timer timer = Timer.builder("rest.request.timer").register(Metrics.globalRegistry);

public Uni<***> getData(* request) throws IOException 
{ 
   return this.timer.record(()-> {
            return serviceObject.get();
        });
 } 

    ```

1 ответ

Если бы я был вами, я бы сделал что-то вроде:

Таймер timer = Timer.builder("rest.request.timer").register(Metrics.globalRegistry);

      public Uni<***> getData(* request) throws IOException 
{ 
   long start = Instant.now().toEpochMilli(); 
   // app logic 
   return x.invoke(() -> {
       long end = Instant.now().toEpochMilli()-start; 
       this.timer.record(end,TimeUnit.MILLISECONDS);
   });
 } 
Другие вопросы по тегам