Quarkus Rest-客户端节流/速率限制

jai*_*lis 3 resteasy quarkus quarkus-rest-client

我正在使用 quarkus.rest-client 调用外部 API,并希望将这些调用的频率限制为每秒 50 次,这样我就不会淹没外部服务。在没有 side-car 方法(通过代码)的情况下实现这一目标的推荐方法是什么?

Fel*_*ler 5

您可以使用@BulkheadMicroprofile 注释并设置方法执行的最大并发线程限制。但是,这仅适用于您的应用程序的一个实例。

Eclipse Microprofile 文档

从上述文档复制的示例:

@Bulkhead(5) // maximum 5 concurrent requests allowed
public Connection serviceA() {
   Connection conn = null;
   counterForInvokingServiceA++;
   conn = connectionService();
   return conn;
}
Run Code Online (Sandbox Code Playgroud)
// 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);
}
Run Code Online (Sandbox Code Playgroud)

value您甚至可以在部署时设置,因此无需重新构建即可更改此参数。

要使用@Bulkhead,您必须将容错添加到您的项目中

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-smallrye-fault-tolerance</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)