我刚刚开始使用Spring,我想为我正在从事的一个项目构建一个Spring。我的后端有很多对第三方服务的HTTP调用,我决定谨慎地实现反应式设计,并让架构是非阻塞的。我正在使用Retrofit,它有一个基于回调的异步API,对我来说工作得很好。这就是问题所在;我已经使用Hibernate和JPA实现了我的数据库和模型,它非常成熟,可以处理从迁移到验证的所有事情,我喜欢使用JPA,但它是阻塞的,因此不适合我的体系结构设计。是否可以将反应式堆栈放在其他地方,然后在工具和框架几乎与JPA相同的情况下将持久化内容迁移到反应式模型?主要的问题是在启动时创建数据库模式,如果有解决方案,我很乐意使用它。
发布于 2021-05-04 23:15:30
从性能的角度来看,在任何完全反应式的webflux应用程序中阻塞都是不好的。
Webflux从很少的线程开始,这意味着如果你阻塞,你的应用程序(在负载下)很容易受到线程匮乏的影响,这是因为在反应式应用程序中不会产生新的线程,并且你的应用程序小线程池将被阻塞,等待来自数据库的响应。
有一个解决方法是,您可以使用subscribeOn
操作符将所有潜在的阻塞调用放在它自己的调度程序上。reactor documentation中记录了这一点
请记住,通过包装阻塞调用,您不会从反应式编程中获得好处,例如更小的内存占用和潜在的更高吞吐量。但至少你不会遭受线程饥饿的痛苦。
相反,这些调用将表现为对“常规spring boot web服务器”的“常规调用”,因为这些调用将被分配一个线程,该线程将在整个执行过程中跟随该调用。
https://stackoverflow.com/questions/67366156
复制相似问题