我是Spring的新手,我想知道当Mono从ReactiveMongo存储库返回时会发生什么。
数据库调用在返回后立即开始吗?
例如:
public void serviceMethod() {
var mono = reactiveMongoRepo.findItemById("123");
}当返回数据库调用时,是立即启动数据库调用,还是将数据库调用立即启动,还是必须将subscrisbe 放到 Mono 中才能启动数据库调用?
引擎盖下面到底发生了什么?
发布于 2021-08-18 20:28:48
当您声明您的反应性代码时,它就是一个声明。你基本上是在描述当某人subscribes时你想让你的流看起来像什么。这在反应堆术语中被称为assembly time。
当某人实际订阅(例如外部客户端)时,我们输入所谓的subscription time。订阅者触发向流传播的信号,其目的是查找publisher。
subscriber基本上是在反向问(上游),“你是出版商吗?”该链可能回答“否”,然后信号将再次传播到链上(上游),询问“您是出版商吗?”直到它找到一个。例如,一个数据库调用,或者一个Flux,或者一个Mono等等。
当它从那里找到一个publisher时,我们就在execution time。数据将开始流经管道(按更自然的自上而下顺序,或上游到下游)。
您可以在由反应堆开发人员通量的飞行编写的博客系列西蒙·巴斯莱中阅读更多关于它的内容,这是一个很好的阅读,可以更多地了解反应堆库的内部工作。
发布于 2021-08-18 12:30:54
不是的。直到您,或者更有可能在使用Spring时,框架才会发生任何事情--框架订阅了这个链。
https://projectreactor.io/docs/core/release/reference/#reactive.subscribe
在反应堆中,当您编写发布者链时,默认情况下数据不会开始泵入其中。相反,您可以创建异步过程的抽象描述(这可以帮助实现可重用性和组合)。通过订阅,您可以将发布服务器绑定到订阅服务器,从而触发整个链中的数据流。这在内部是通过来自上游传播的订阅者的单个请求信号实现的,这些信号一直传播到源发布服务器。
https://stackoverflow.com/questions/68832106
复制相似问题