【问题标题】:Why do I get `Only one connection receive subscriber allowed` when the response has an HTTP error status code?当响应具有 HTTP 错误状态代码时,为什么我会得到“只允许一个连接接收订阅者”?
【发布时间】:2019-01-06 11:29:32
【问题描述】:

在休息请求中,我使用 Spring WebClient 向 Web 服务发送另一个请求,并希望将结果返回给调用者:

return webClient.post()
  .uri(url)
  .body(...)
  .retrieve()
  .bodyToMono(String::class.java)
  .map { ResponseEntity.ok(it) }

现在 Web 服务返回 HTTP 错误状态代码,我收到以下错误:

java.lang.IllegalStateException: Only one connection receive subscriber allowed.

当返回状态码 200 时,不会抛出任何错误。

我也试过自己检查状态并抛出异常,但行为还是一样:

return webClient.post()
  .uri(url)
  .body(...)
  .retrieve()
  .onStatus(HttpStatus::isError) { clientResonse ->
     clientResonse.bodyToMono(String::class.java)
        .map { RuntimeException(it) }
  }
  .bodyToMono(String::class.java)
  .map { ResponseEntity.ok(it) }

我做错了什么?

代码示例在 Kotlin 中,但我假设每个 Java 开发人员都能阅读:)

【问题讨论】:

    标签: java kotlin reactive-programming spring-webflux project-reactor


    【解决方案1】:

    这是 Spring Framework 中的一个已知问题,已在 Spring Framework 5.1.4 中修复 - 请参阅 SPR-17564。

    不幸的是,我不知道有任何解决此问题的方法,因此升级到 Spring Framework 5.1.4 / Spring Boot 2.1.2 是目前唯一的解决方案。

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 2018-06-11
      • 2022-07-14
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 2019-02-11
      相关资源
      最近更新 更多