首页 > 解决方案 > 使用 RestTemplate 消耗两个 RESTful API 时出现 HTTP 409 错误 - 已解决

问题描述

解决了! 其中一个 API 对查询间隔有一些限制,即最少 60 秒。我试图以比预期更快的速度调用 API。

但是,API 应该返回 HTTP 429 错误而不是 409。

我有一个简单的 Spring Boot 项目,其计划任务如下:

@Autowired
private RestTemplate restTemplate;

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder.basicAuthentication(username, password).build();
}


@Scheduled(fixedRate = 10000)
public void getData() throws Exception {

    String realtime_data = restTemplate.getForObject(realtime_addr, String.class);
    log.info(realtime_data);
    String legal_data = restTemplate.getForObject(legal_addr, String.class);
    log.info(legal_data.substring(0,200));

我有两个不同地址的不同 API,我想使用它们。

但我最终遇到了以下异常:

org.springframework.web.client.HttpClientErrorException$Conflict:409 冲突 在 org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:91) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE] 在 org.springframework.web.client.DefaultResponseErrorHandler。 handleError(DefaultResponseErrorHandler.java:122)~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102)~[spring -web-5.1.9.RELEASE.jar:5.1.9.RELEASE] 在 org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] 在 org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:778) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE] 在 org.springframework。 web.client.RestTemplate.doExecute(RestTemplate.java:736)~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]在org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670)~[spring-web-5.1.9 .RELEASE.jar:5.1.9.RELEASE] 在 org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:311) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]在 ir.pisys.rest.Schedule.reportCurrentTime(Schedule.java:64) ~[classes/:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221] 在 sun.reflect.NativeMethodAccessorImpl .invoke(Unknown Source) ~[na:1.8.0_221] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_221] at java.lang.reflect.Method.invoke(Unknown Source) ~[ na:1.8.0_221] 在 org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE] at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.1.9 .RELEASE.jar:5.1.9.RELEASE] 在 java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [na:1.8.0_221] at java.util.concurrent.FutureTask.runAndReset(Unknown Source) [na :1.8.0_221] 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(未知来源)[na:1.8.0_221] 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(未知来源)[na:1.8。 0_221] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_221] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_221] 在 java.lang 。线。运行(未知来源)[na:1.8.0_221]

问题是什么?

标签: javarestspring-boothttpresttemplate

解决方案


推荐阅读