我有一个使用 REST Web 服务的高度并发环境。 REST 服务文档表示,每次调用 API 时应至少间隔 100 毫秒(每秒 10 次调用)。此外,REST API 不支持并发调用。它们应该一个接一个地进行,在触发另一个请求之前等待响应。我采用的方法是:
private static RestTemplate restTemplate; // Rest template configured and working.
public ResponseEntity<T> consume() {
...
try {
synchronized (restTemplate) { // Locking on static RestTemplate.
response = restTemplate.exchange(endpointUrl, httpMethod, request, classType, uriData);
try {
restTemplate.wait(100); // Is this OK?
} catch (final InterruptedException e) {
e.printStackTrace();
}
}
return response;
} catch (final HttpStatusCodeException e) {
throw new RuntimeException(e.getResponseBodyAsString(), e);
}
}
正确吗?谢谢!
最佳答案
这在很大程度上取决于您想要实现的目标。您发布的代码很可能不完整,因此很难给出准确的解决方案。此外,它也执行相同的请求 我的猜测是每次都应该有所不同(uriData 或请求)。
您需要调用多少个电话?如果答案是固定数字,则很可能使用 for
和 Thread.sleep(100);
可能就足够了。否则,如果您有不同的事件触发对此服务的调用并且参数不同,我将有一个阻塞队列和一个将消耗并 sleep 100 毫秒的线程。生产者将添加到队列中,并且将有一个消费者,如果队列中有东西,它将以 100 毫秒的间隔进行调用,否则,它将只是等待。
关于java - 按顺序使用 REST API,多线程环境中每次调用之间至少间隔 100 毫秒。 (带 RestTemplate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248077/