【问题标题】:Is it a good idea to cache webclient creation缓存 webclient 创建是个好主意吗
【发布时间】:2021-10-16 12:57:44
【问题描述】:

我正在使用 spring webclient 来调用外部 API。我有一个返回 webclient 的构建器。我的问题是,为特定 URL 缓存创建的 Web 客户端是一个好主意。下面是我的代码。

@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,因此我还必须创建多个 webclient。

【问题讨论】:

    标签: java spring spring-boot spring-webclient


    【解决方案1】:

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

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

    2. 如果你真的想这样做,那么使用 spring 缓存抽象就有点过头了,因为很可能一个应用程序不需要创建很多 WebClient 会导致 JVM 有机会耗尽内存。所以你不需要缓存提供的过期和驱逐功能,只需要简单的HashMap就可以了。

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

    【讨论】:

      猜你喜欢
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 2011-07-29
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多