gpt4 book ai didi

java - 在 Reactive Repositories 中插入数据后订阅

转载 作者:行者123 更新时间:2023-12-05 04:40:32 27 4
gpt4 key购买 nike

我是响应式(Reactive)世界的新手,所以在浏览响应式(Reactive)存储库的一些示例时,我发现了以下内容:

reactiverepository.save(employee).subscribe() // subscribing to make the publisher emit the data

reactiverepository.findAll() // no subscribe() ?

我知道为了让发布者(在上面的例子中是 Flux)发出数据,我们需要 subscribe() 到它。但是为什么我们不像上面的例子那样在其他 CRUD 方法中有相同的 subscribe() 调用呢?我在这里缺少什么?

最佳答案

reactor 使用概念生产者消费者消费者 订阅 生产者 并且在您订阅之前什么都不会发生

当使用 webflux 时,它基本上是 spring-web 但使用 reactor 实现的概念是 最终消费者通常是一个订阅者

你可以认为数据库是生产者,调用客户端(网页、react app、移动应用)是消费者并且当客户端发起对后端的调用时,客户端订阅到您的服务器服务器依次订阅 code> 到数据库(还记得吗?生产者,数据库生产数据)。

所以您的服务器基本上只是将数据转发给调用客户端,这意味着通常您只需获取数据并将其返回给客户端,框架将自动处理“订阅”。

这通常意味着,您不应该在您的应用程序中订阅,相反,您应该链接调用,并始终保持链条完好无损,以便您的服务器可以为客户端生成项目。

那么你应该什么时候在你的服务器上订阅

一个原因可能是您的服务器中有一个正在运行的作业,它可能从一台服务器获取数据并将其插入到它的数据库中。然后你的服务是发起客户端,订阅另一个服务器,另一个服务器为你生产项目,你接收它们并将它们插入到你的数据库中。

但例如在您的示例中:

// first we fetch all, we filter, then we save, and we return back to the calling client keeping the chain intact, and no subscriptions
return reactiverepository.findAll()
.filter(employes -> //some criteria)
.flatMap(employee -> reactiverepository.save(employee));

关于java - 在 Reactive Repositories 中插入数据后订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70258043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com