java - 按顺序使用 REST API,多线程环境中每次调用之间至少间隔 100 毫秒。 (带 RestTemplate)

标签 java multithreading rest thread-safety resttemplate

我有一个使用 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 或请求)。

您需要调用多少个电话?如果答案是固定数字,则很可能使用 forThread.sleep(100); 可能就足够了。否则,如果您有不同的事件触发对此服务的调用并且参数不同,我将有一个阻塞队列和一个将消耗并 sleep 100 毫秒的线程。生产者将添加到队列中,并且将有一个消费者,如果队列中有东西,它将以 100 毫秒的间隔进行调用,否则,它将只是等待。

关于java - 按顺序使用 REST API,多线程环境中每次调用之间至少间隔 100 毫秒。 (带 RestTemplate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248077/

相关文章:

Python:同时两个循环

api - 休息API : How to search for other attribute

java - 如何查找所有子节点的文本

java - 快速 Java 优化问题

java - 有没有办法获取java方法中声明的所有变量的列表?

java - Jersey 在抛出 WebApplicationException 时产生意外的默认媒体类型

mysql - 来自数据库的 RESTful Web 服务错误 500

java - fragment 没有每次都刷新/调用

C++11 函数局部静态常量对象的线程安全初始化

python - Tkinter 和线程