- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过千分尺和普罗米修斯监控我的 Spring Boot 应用程序的其余模板指标。当我使用 ResttemplateBuilder 构建的 Resttemplate 并用于调用另一个 api 时,它确实获得了预期的 http.client.requests 指标。但是对于 AsyncResttemplate,当我使用 AsyncResttemplate 创建并使用它来调用另一个 api 时,它没有提供任何 http.client.requests 指标。
这是我创建 AsyncResttemplate bean 时的代码
@Bean
public AsyncRestTemplate asyncRestTemplate(){
return new AsyncRestTemplate();
}
这是我使用异步调用另一个 api 时的代码
public ListenableFuture async() {
ListenableFuture<ResponseEntity<AccountResponse>> accountResponseList = asyncRestTemplate.exchange(accountUrl, HttpMethod.GET, new HttpEntity<>(new HttpHeaders()), AccountResponse.class);
accountResponseList.addCallback(new ListenableFutureCallback<ResponseEntity<AccountResponse>>() {
@Override
public void onSuccess(ResponseEntity<AccountResponse> accountResponseResponseEntity) {
System.out.println("Success");
}
@Override
public void onFailure(Throwable throwable) {
System.out.println("Failure");
}
});
return accountResponseList;
}
这些是pom.xml中导入的相关依赖
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
这是我期望从 micrometer-prometheus 指标中获得的结果
# HELP http_client_requests_seconds Timer of RestTemplate operation
# TYPE http_client_requests_seconds summary
http_client_requests_seconds_count{application="${spring.application.name}",clientName="localhost",method="GET",status="200",uri="/getAllAccount",} 1.0
http_client_requests_seconds_sum{application="${spring.application.name}",clientName="localhost",method="GET",status="200",uri="/getAllAccount",} 0.0242929
# HELP http_client_requests_seconds_max Timer of RestTemplate operation
# TYPE http_client_requests_seconds_max gauge
http_client_requests_seconds_max{application="${spring.application.name}",clientName="localhost",method="GET",status="200",uri="/getAllAccount",} 0.0242929
上面的指标来自 ResttemplateBuilder,有没有办法也可以为 AsyncRestTemplate 获取这些指标?
更新:根据 M. Deinum 的建议,我将 bean 更改为
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
return builder.setConnectTimeout(Duration.ofSeconds(500)).build();
}
@Bean
public AsyncRestTemplate asyncRestTemplate(RestTemplate restTemplate){
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
SimpleAsyncTaskExecutor asyncTaskExecutor = new SimpleAsyncTaskExecutor();
asyncTaskExecutor.setConcurrencyLimit(10);
requestFactory.setTaskExecutor(asyncTaskExecutor);
return new AsyncRestTemplate(requestFactory, restTemplate);
}
但仍然没有从异步调用中获取任何 http.client.requests
最佳答案
类似这样的事情应该做。
@Bean
public AsyncRestTemplate asyncRestTemplate(RestTemplateBuilder builder){
RestTemplate rest = builder.build();
AsyncClientHttpRequestFactory requestFactory = (AsyncClientHttpRequestFactory) rest.getRequestFactory();
return new AsyncRestTemplate(requestFactory, rest);
}
这将重用现有的配置。 AsyncRestTemplate
只是 RestTemplate
的包装器,将其与“TaskExecutor”相结合。
注意:请注意,从 Spring 5 开始,AsyncRestTemplate
已被弃用,并且可能会在不久的将来被删除!
关于java - 是否有办法从 AsyncResttemplate 获取 http.client.requests 指标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58621180/
我是一名优秀的程序员,十分优秀!