【问题标题】:Does mono.cache works for Webclient response?mono.cache 是否适用于 Webclient 响应?
【发布时间】:2021-02-18 16:43:14
【问题描述】:

我正在尝试缓存由 webclient 调用返回的身份验证令牌响应。

public Mono<Token> getToken() {
  return webclient.post().retrieve()
        .bodyToMono(Token.class)
        .cache(this::getTokenLiveDuration, t -> Duration.ZERO, () -> Duration.ZERO).log();
}

public Mono<MyResponse> execute() {
  return getToken().flatMap(token -> {
        webclient.post().header("Auth", token.getValue())
                 .retrieve()
                 .bodyToMono(MyResponse.class)
        }
}

但是如果我在同一个实例中运行两次execute(),它们有不同的令牌,这意味着缓存不起作用。

.cache的正确使用方式或缓存webclient响应的正确方式是什么?

【问题讨论】:

    标签: java spring-boot project-reactor spring-webclient


    【解决方案1】:

    这是因为每次调用 getToken 时,都会使用自己的缓存创建一个新的 Mono

    使缓存有效的一种方法是为缓存的令牌Mono 创建一个字段,并在执行方法中使用该Mono

    【讨论】:

    • 你是说我必须用 webclient 初始化一个单声道字段吗?
    • 是的,例如在构造函数中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多