Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 限制RESTful服务的传出呼叫数_Java_Spring_Rest_Service - Fatal编程技术网

Java 限制RESTful服务的传出呼叫数

Java 限制RESTful服务的传出呼叫数,java,spring,rest,service,Java,Spring,Rest,Service,我正在处理一个项目,应用程序将调用RESTAPI。合作伙伴定义,每秒对API的调用不应超过40次。由于我以前从未研究过这样的限制,我想知道哪种方法是处理这个问题的最佳方法。项目语言是Java,应用程序实现为SpringMicroService。 如有任何意见,将不胜感激。 提前谢谢。看一下 它将允许你安排很多情况 对于管理数据,最好是使用队列,或者我想说每秒检查命中率会有点激进。因此,让我们将时间保持在5秒,最多200个API调用。您可以有一个实用程序组件,它根据过去的调用计数告诉您是否进行调用

我正在处理一个项目,应用程序将调用RESTAPI。合作伙伴定义,每秒对API的调用不应超过40次。由于我以前从未研究过这样的限制,我想知道哪种方法是处理这个问题的最佳方法。项目语言是Java,应用程序实现为SpringMicroService。 如有任何意见,将不胜感激。 提前谢谢。

看一下 它将允许你安排很多情况


对于管理数据,最好是使用队列,或者我想说每秒检查命中率会有点激进。因此,让我们将时间保持在5秒,最多200个API调用。您可以有一个实用程序组件,它根据过去的调用计数告诉您是否进行调用

@Component
public class HitLimit {

    private AtomicInteger hitCount = new AtomicInteger(0);

    @Scheduled(fixedDelay = 5000)
    public void scheduleClean() {
        hitCount.set(0);
    }

    public boolean canMakeCall() {
        return hitCount.incrementAndGet() < 200;
    }
}
@组件
公共类HIT限制{
私有AtomicInteger命中计数=新的AtomicInteger(0);
@计划(固定延迟=5000)
public void scheduleClean(){
命中数集(0);
}
公共布尔值canMakeCall(){
返回hitCount.incrementAndGet()<200;
}
}

节流真的是你的应用程序的责任吗?如果上游流程调用>超过阈值,那么应该是什么行为?架构是否包括网关(以便网关可以控制油门)?唯一的条件是发送到此API的请求不超过40个。我可以使用网关,但我不知道该使用哪一个?好吧,但如果我必须每秒发送200个请求,我可以在哪里排队?IvajloIliev我想你说过你需要限制。当限制不存在时,我们不能对用户请求进行排队,这将使系统复杂的大量请求连接打开。如果这个调用可以异步进行,您需要实现一个队列任务系统。谢谢,但是除了调度之外,我还需要排队。如果我必须每秒发送200个请求,那么我可以在哪里对其他请求进行排队?