缓存 webclient 创建是个好主意吗

Is it a good idea to cache webclient creation

我正在使用 spring 网络客户端调用外部 API。我有一个 returns webclient 的构建器。我的问题是,为特定 URL.Below 缓存创建的 webclient 是我的代码的好主意。

@Cacheable(value = "somevalue", cacheManager = "cachemnager", key = "#url")
public WebClient getWebClient(String url, Map<String, String> headers,List<ExchangeFilterFunction> filterFunctions) {
        return WebClient.builder()
            .baseUrl(url)
            .defaultHeaders(addsome headers)
            .filters(list -> list.addAll(filterFunctions))
            .build();
}

我还必须用不同的 url/params/headers 调用多个 API,所以我也必须创建多个网络客户端。

对我来说是个坏主意因为:

  1. spring-boot 已经为您自动配置了 WebClient.Builder。它还 pre-configured default codec 在此构建器中用于转换 HTTP request/reponse to/from 不同类型的 java 对象。自己创建就意味着你需要自己配置这些东西。

  2. 如果你真的想这样做,那么使用 spring 缓存抽象就有点矫枉过正了,因为应用程序很可能不需要创建很多 WebClient JVM 有机会 运行 内存不足。所以你不需要缓存提供的过期和逐出功能,只需要使用一个简单的HashMap来保持简单。

official docs 强烈建议注入预配置的 WebClient.Builder 来创建和配置 WebClient。所以就跟着它吧。另请参阅文档以获取有关如何执行此操作的示例。