Reactive Streams:Spring WebFlux - 订阅现有发布者

时间:2018-04-11 09:54:53

标签: java spring spring-webflux reactive reactive-streams

我目前正在将现有的Spring异步REST架构迁移到Spring的新WebFlux库,并且有一个关于加入多个请求的问题,以便他们可以监听相同的已发布响应。

用例如下:

  1. 客户端A连接到我们的Web服务器并请求数据
  2. 我们点击缓存以检查我们是否有数据
  3. 我们没有,所以我们去检索这些数据(客户A订阅并等待回复)
  4. 客户端B连接到我们的Web服务器并请求相同的数据(命中相同的端点)
  5. 我们检查缓存,数据仍然不存在
  6. 由于我们已经为客户A提取此数据,因此我们不想再发出请求,但我们也不希望将客户B转走。客户B应该能够收听相同的信息
  7. 客户端B如何订阅客户端A正在等待的相同响应流?

1 个答案:

答案 0 :(得分:8)

&#34;客户A已订阅并等待回复&#34; 我想这个请求被编码为Subscriber<Response> clientA = ... Mono<Response> request = makeRequest(...); request.subscribe(clientA);,而客户端A依次对它进行编码:

Subscriber<Response> clientB = ... request.subscribe(clientB);

然后clientB应该以相同的方式订阅:

Mono<Response>

此外,缓存不应包含先前保存的响应数据,而应包含SELECT CAST(10 AS NUMERIC) + CAST(254.53 AS NUMERIC) = CAST(264.53 AS NUMERIC) AS TestComparison1, CAST(10 AS NUMERIC) + CAST(254.54 AS NUMERIC) = CAST(264.54 AS NUMERIC) AS TestComparison2 Result: "1" "0" 类型的请求本身。然后,如果在缓存中找到这样的请求,则新客户端只需订阅它,无论该请求是否已经完成。