@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);
});
}