我正在使用quarkus.rest客户端调用外部API,并希望将这些调用的频率限制在每秒50次,这样我就不会淹没外部服务。在没有侧车方法的情况下(通过代码),推荐的实现方法是什么?
您可以使用< code > @ Bulkhead micro profile注释,并为方法的执行设置最大并发线程限制。但是,这只适用于应用程序的一个实例。
日食微配置文件文档
从上面的留档复制的示例:
@Bulkhead(5) // maximum 5 concurrent requests allowed
public Connection serviceA() {
Connection conn = null;
counterForInvokingServiceA++;
conn = connectionService();
return conn;
}
// maximum 5 concurrent requests allowed, maximum 8 requests allowed in the waiting queue
@Asynchronous
@Bulkhead(value = 5, waitingTaskQueue = 8)
public Future<Connection> serviceA() {
Connection conn = null;
counterForInvokingServiceA++;
conn = connectionService();
return CompletableFuture.completedFuture(conn);
}
您甚至可以在部署中设置值
,这样就可以在不进行新构建的情况下更改此参数。
要使用@Bulkhead
,必须将容错添加到项目中
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-fault-tolerance</artifactId>
</dependency>
我正在使用SpringWebFlux和netty构建一个微服务。在内部,我使用web客户端进行RESTAPI调用。如何控制通过webclient调用RESTAPI的速率?我猜backnpressure只适用于单个请求/回复,不适用于对我的微服务的多个请求。Amy pointers将不胜感激。谢谢
据我所知,Facebook API的速率限制是每个令牌每600秒大约600次调用。 因此,当用户登录时,超过速率限制应该不会有问题,因为每个用户都有不同的用户令牌,因此每个用户每600秒将有600个呼叫的速率限制。但我担心的是,当用户浏览公共夜总会页面和活动时,当他们没有登录时,我的应用会超过速率限制,因为多个用户只能使用1个应用令牌和1个IP地址(我的服务器)。如果有多个用户同时浏览公共夜总会页
速率限制配置参考 filter.http.RateLimit filter.http.RateLimit proto { "domain": "...", "stage": "...", "request_type": "...", "timeout": "{...}" } domain (string, REQUIRED) 需要调用速率限制服务时的域。 stage (uint3
速率限制配置参考。 filter.network.RateLimit filter.network.RateLimit proto { "stat_prefix": "...", "domain": "...", "descriptors": [], "timeout": "{...}" } stat_prefix (string, REQUIRED) 发布统计信息时使用的前缀。
速率限制配置概述。 { "name": "rate_limit", "config": { "domain": "...", "stage": "...", "request_type": "...", "timeout_ms": "..." } } domain (required, string) 调用速率限制服务时使用的域。 stage (opt
速率限制配置参考。 { "name": "ratelimit", "config": { "stat_prefix": "...", "domain": "...", "descriptors": [], "timeout_ms": "..." } } stat_prefix (required, string) 发布统计信息时使用的前缀。 domai