如何在Spring Boot中为每个用户设置速率限制?
我正在开发一个处理大量传入请求调用的Spring Boot" title="Spring Boot">Spring Boot Rest API。我的控制器如下所示:
@RestControllerpublic class ApiController {
List<ApiObject> apiDataList;
@RequestMapping(value="/data",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET)
public ResponseEntity<List<ApiObject>> getData(){
List<ApiObject> apiDataList=getApiData();
return new ResponseEntity<List<ApiObject>>(apiDataList,HttpStatus.OK);
}
@ResponseBody
@Async
public List<ApiObject> getApiData(){
List<ApiObject> apiDataList3=new List<ApiObject> ();
//do the processing
return apiDataList3;
}
}
所以现在我想为每个用户设置一个速率限制。假设每个用户每分钟只能请求5个请求或类似的请求。如何为每个用户设置速率限制,使其每分钟只能进行5次api调用,并且如果用户请求的请求更多,我可以发送回429响应?我们需要IP地址吗?
任何帮助表示赞赏。
回答:
Spring中没有该组件。
- 您可以将其构建为解决方案的一部分。创建一个过滤器并在您的spring上下文中注册它。过滤器应检查传入呼叫,并在一个时间窗口内计算每个用户的传入请求。我会使用令牌桶算法,因为它是最灵活的。
- 您可以构建一些独立于当前解决方案的组件。创建完成该任务的API网关。您可以扩展Zuul网关,然后再次使用令牌桶算法。
- 您可以使用已经内置的组件,例如Mulesoft ESB,它可以充当API网关并支持速率限制和限制。我自己从未使用过。
- 最后,您可以使用具有速率限制和限制等功能的API Manager。Checkout MuleSoft,WSO2、3Scale,Kong等…(大多数将需要付费,一些是开源的,并且具有社区版)。
以上是 如何在Spring Boot中为每个用户设置速率限制? 的全部内容, 来源链接: utcz.com/qa/423563.html