Feign 客户端是否有瓶颈的本地实现?

Does Feign client have native implementation of bottlenecking?

我遇到了以下情况,令我惊讶的是,我找不到太多文档: 有一项服务仅通过 1 1 1 获取项目详细信息来提供休息呼叫。 共有 1k+ 项。

出于响应的原因,我想在我这边保留这些数据,而不是懒惰地获取它。

为了让我的 API 键不被锁定,我想将我的调用限制为每秒 X 次调用。

我在 Feign 文档中找不到对此的任何支持。 有人知道有没有吗?或者您对如何执行此实施有任何建议?

Feign 中没有内置节流功能,而是委托给底层 Client 实现。话虽如此,您可以定义自己的客户端,从所提供的 Apache HttpOkHttpRibbon.

之一扩展

一种解决方案是扩展 Client 以使用此答案中概述的 ScheduledThreadPoolExecutor

要将其与 Feign 中提供的 ApacheHttpClient 一起使用,您可以扩展它,提供您自己的 execute 方法实现以使用执行器。

public class ThrottledHttpClient extends ApacheHttpClient {
    // create a pool with one thread, you'll control the flow later.
    private final ExecutorService throttledQueue = Executors.newScheduledThreadPool(1);

    @Override
    public Response execute(Request request, Request.Options options) throws IOException {
        // use the executor
        ScheduledFuture<Response> future = throttledQueue.scheduleAtFixedRate(super.execute(), ....);
        return future.get()
}

设置适当的线程池大小、延迟和固定等待以达到您想要的吞吐量。