8

根据micronaut-data 反应指南

“...在反应式执行的情况下,如果后备实现是阻塞的,Micronaut Data 将使用配置的 I/O 线程池在不同的线程上安排查询执行。

如果后备实现本身支持驱动程序级别的反应类型,则不使用 I/O 线程池,而是假定驱动程序将以非阻塞方式处理查询......"

我的直截了当的问题:访问关系数据库(例如 PostGres R2DBC 驱动程序)抛出 R2DBC Micronaut Data 是否会依赖 R2DBC 驱动程序以非阻塞方式处理并且更具可扩展性?

假设我的微服务暴露了一个基于 ReactiveX 的 Reactive 端点并且必须访问阻塞数据源 throw Micronaut Data JDBC(例如,在生产版本中还没有 Oracle R2DBC),从上面很明显它“将使用配置 I /O 线程池”访问数据时。我是否完全失去了反应性端点的好处?

这是我使用 Micronaut 的第一个项目,我很少有使用反应式方法的项目。我远不是反应式最佳实践方面的专家,但我记得我读过几篇博客:如果你有阻塞源,请避免使用反应式堆栈。我还记得读过,将非阻塞与阻塞设计混合可能会产生更糟糕的结果,这主要是因为 Eventloop(例如 Netty)的设计方式。由于我将 Micronaut 与 ReactiveX 和关系数据库一起使用,某些情况下与 R2DBC 一起使用,而其他情况下与 JDBC 一起使用,对于我的疑问,我将不胜感激。

4

1 回答 1

4

您并没有完全失去好处,因为如果您有未阻塞的 HTTP 请求,您可以使用 JDBC 逻辑组合这些操作。

但是,如果您想使用 R2DBC 实现真正的非阻塞,请参阅https://github.com/micronaut-projects/micronaut-r2dbc/

于 2020-11-16T13:13:42.387 回答