我想使用微米记录执行时间,异常类型(如果有的话)的异步方法,当它最终发生。有什么推荐的方法吗?
例如,aws sqs提供sqasync客户端,我想让千分尺听它返回的Future,并暴露成功和失败延迟指标
@Timed(value = PrometheusConstants.SQS_ASYNC_PUBLISH_TIMER, percentiles = {0.5, 0.95, 0.99}, histogram = true)
public Future<SendMessageResult> sendAsync(String queueUrl, String message) {
return amazonSQSAsync.sendMessageAsync(queueUrl, message);
}
上面的例子不能工作,即使我的localstack sqs down。Micrometer将请求视为成功。
注意:这个例子应该基于文档工作,但它不工作https://micrometer.io/docs/concepts#_the_timed_annotation
您可以使用方法measureTimeMillis来测量异步函数的时间,然后使用Timer。构建器来创建计时器和记录方法来记录度量。
//create your Meter registry
MeterRegistry registry = new SimpleMeterRegistry();
// create your timer
val myTimer = Timer.builder("my.timer")
.publishPercentileHistogram()
.register(registry);
// Executes the given block and returns elapsed time in milliseconds
val asyncFunctionTime = measureTimeMillis {
sendAsync()
}
// Record the metric and send to micrometer
myTimer.record(asyncFunctionTime, TimeUnit.MILLISECONDS)
有关更多信息,您可以查看Micrometer文档