gpt4 book ai didi

project-reactor - 用于简单 RESTful 调用的响应式(Reactive) R2DBC

转载 作者:行者123 更新时间:2023-12-04 12:28:53 25 4
gpt4 key购买 nike

由于 R2DBC 是 react 性且非阻塞的,我想了解在简单的 RESTful CRUD 服务中使用 R2DBC 的好处
假设 Spring Boot 应用程序使用下面的存储库公开 RESTful 服务

public interface CustomerRepository extends ReactiveCrudRepository<Customer, Long> {

@Query("SELECT * FROM customer WHERE last_name = :lastname")
Flux<Customer> findByLastName(String lastName);

}
这个存储库是从服务中调用的,结果需要在服务中进行转换,然后才能返回 Controller 。
Flux<Customer> customers = repository.findAll();
为了访问完整的客户列表,我需要调用 blockLast()在 Flux 上,这使其阻塞并违背了使用响应式(Reactive)组件的目的
这是否意味着在这个简单示例中使用 R2DBC 没有任何好处?我错过了什么吗?
Flux 是否只能用于异步订阅,其中 Flux 集合的处理发生在不同的线程中?

最佳答案

In order to access the complete list of customers , I need to invoke blockLast() on the Flux which makes it blocking and defeats the purpose of using reactive components


您只需拨打 blockLast()如果您想实际获得对 List<Customer> 的引用- 但正如你所说,如果你这样做,你就会失去所有的 react 优势。 (您真正应该考虑阻止恕我直言的唯一时间是,如果您正在迁移到响应式(Reactive)系统,并将响应式(Reactive)库放置到位,但尚未准备好使整个系统变为响应式(Reactive)。)
如果您只想一次访问完整的客户列表,您可以明智地拨打 collectList()获得 Mono<List<Customer> .这样你就可以留在响应式(Reactive)上下文中,但在任何响应式(Reactive)运算符中,你都可以使用整个列表。
这里唯一需要注意的是内存占用——如果你只是处理一个 Flux<Customer>照原样,那么你永远不需要在内存中存储一​​组它们,所以有多少真的无关紧要(甚至可以是无限的。)如果你先把它收集到一个列表中,然后所有这些客户必须同时存储在内存中。
这是否是一个问题取决于您的用例。如果您谈论的是 10 个左右的客户,那完全没问题。如果您谈论的是数十亿美元,那么这很可能不是一个明智的解决方案。

关于project-reactor - 用于简单 RESTful 调用的响应式(Reactive) R2DBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68313039/

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