代码之家  ›  专栏  ›  技术社区  ›  wild_nothing

反应流:Spring WebFlux-订阅现有发布服务器

  •  4
  • wild_nothing  · 技术社区  · 6 年前

    我目前正在将我们现有的Spring异步REST体系结构迁移到Spring的新WebFlux库中,对于如何连接多个请求以便它们可以侦听相同的已发布响应,我有一个疑问。

    用例如下:

    1. 客户端A连接到我们的web服务器并请求数据
    2. 我们点击缓存检查是否有数据
    3. 我们没有,所以我们去检索这些数据(客户端A已订阅并等待响应)
    4. 客户端B连接到我们的web服务器并请求相同的数据(命中相同的端点)
    5. 我们检查了缓存,数据仍然不存在
    6. 由于我们已经在为客户机A获取此数据,因此我们不想再提出另一个请求,但是,我们也不想拒绝客户机B。客户端B应该能够监听相同的信息

    客户端B如何订阅客户端A正在等待的相同响应流?

    1 回复  |  直到 6 年前
        1
  •  8
  •   Alexei Kaigorodov    6 年前

    “客户端A已订阅并等待响应” 我想请求被编码为 Mono 客户A从字面上描述:

    Subscriber<Response> clientA = ... Mono<Response> request = makeRequest(...); request.subscribe(clientA);

    那么clientB应该以同样的方式订阅:

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

    此外,缓存不应包含以前保存的响应数据,而应包含类型为的请求本身 Mono<Response> 。然后,如果在缓存中找到这样的请求,新客户端只需订阅它,而不管该请求是否已完成。