Spring boot 如何使spring boot RestTemplate客户端度量不为查询参数创建新标记
我有一个spring引导应用程序,它定义了一个Spring boot 如何使spring boot RestTemplate客户端度量不为查询参数创建新标记,spring-boot,spring-boot-actuator,Spring Boot,Spring Boot Actuator,我有一个spring引导应用程序,它定义了一个RestTemplatebean,如下所示: @Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder.build(); } @Autowired private RestTemplate restTemplate; private String uriTemplate = "http://my.domain.com/books
RestTemplate
bean,如下所示:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
@Autowired
private RestTemplate restTemplate;
private String uriTemplate = "http://my.domain.com/bookstore-api/books";
public List<Book> getBooksByAuthor(String author) {
// create URI for "http://my.domain.com/bookstore-api/books?author={authorId}"
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder
.fromUriString(uriTemplate)
.queryParam("author", author);
// make the GET
ResponseEntity<Book[]> responseEntity = restTemplate.getForEntity(uriComponentsBuilder.toUriString(),Book[].class);
// rest ommitted for brevity
}
另外,拉入弹簧靴启动器执行器和io。千分尺:千分尺注册普罗米修斯
当我使用注入的REST模板时,如下所示:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
@Autowired
private RestTemplate restTemplate;
private String uriTemplate = "http://my.domain.com/bookstore-api/books";
public List<Book> getBooksByAuthor(String author) {
// create URI for "http://my.domain.com/bookstore-api/books?author={authorId}"
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder
.fromUriString(uriTemplate)
.queryParam("author", author);
// make the GET
ResponseEntity<Book[]> responseEntity = restTemplate.getForEntity(uriComponentsBuilder.toUriString(),Book[].class);
// rest ommitted for brevity
}
这将是好的,除了有很多作者在那里,最终我会得到“太多标签”例外
我希望有以下内容(类似于路径变量的模板化方式):
这是否可以通过修改我使用UriComponentsBuilder
的方式来实现?我找到的最接近的方法是定义我自己的restemplateExchangeTagsProvider
,并覆盖默认值以进行一些疯狂的正则表达式替换。我也遇到了同样的问题。也许这些信息会对你有所帮助
在我的例子中,restTemplate.setUriTemplateHandler(handler)已经覆盖了annonymous
MetricsClientHttpRequestInterceptor#createUriTemplateHandler。
而原始的url模板并没有存储在普罗米修斯的内存中
DefaultUriBuilderFactory builderFactory = new DefaultUriBuilderFactory();
builderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
customizer.customize(restTemplate);
restTemplate.setUriTemplateHandler(handler);
所以,
我更改了命令的顺序:
restTemplate.setUriTemplateHandler(handler);
customizer.customize(restTemplate);
请检查MetricsClientHttpRequestInterceptor.customize(restTemplate)之后是否没有restTemplate的设置命令。我也遇到了同样的问题。也许这些信息会对你有所帮助
在我的例子中,restTemplate.setUriTemplateHandler(handler)已经覆盖了annonymous
MetricsClientHttpRequestInterceptor#createUriTemplateHandler。
而原始的url模板并没有存储在普罗米修斯的内存中
DefaultUriBuilderFactory builderFactory = new DefaultUriBuilderFactory();
builderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
customizer.customize(restTemplate);
restTemplate.setUriTemplateHandler(handler);
所以,
我更改了命令的顺序:
restTemplate.setUriTemplateHandler(handler);
customizer.customize(restTemplate);
请检查MetricsClientHttpRequestInterceptor.customize(restTemplate)之后是否没有restTemplate的设置命令。刚刚修复了SpringBoot 2.4.5中的相同问题,使用:
responseEntity = restTemplate.exchange(
config.getDataUrl(),
HttpMethod.GET,
httpEntity,
new ParameterizedTypeReference<String>() {},
rowId);
指标:
http_client_requests_seconds_count{clientName="data-service-dev.apps.cloud.net",method="GET",outcome="SUCCESS",status="200",uri="/api/hbase/getData?rowId={rowId}",} 1.0
...
刚刚修复了SpringBoot 2.4.5中的相同问题,使用:
responseEntity = restTemplate.exchange(
config.getDataUrl(),
HttpMethod.GET,
httpEntity,
new ParameterizedTypeReference<String>() {},
rowId);
指标:
http_client_requests_seconds_count{clientName="data-service-dev.apps.cloud.net",method="GET",outcome="SUCCESS",status="200",uri="/api/hbase/getData?rowId={rowId}",} 1.0
...