根据micronaut-data reactive guide的说法,
"...在反应式执行的情况下,如果后备实现是阻塞的,Micronaut Data将使用配置的I/O线程池在不同的线程上调度查询执行。
如果支持实现本机支持驱动程序级别的反应式类型,则不使用I/O线程池,而是假定驱动程序将以非阻塞方式处理查询……“
我的直接问题是:访问关系数据库(例如,PostGres R2DBC driver)抛出R2DBC是否会依赖R2DBC驱动程序将以非阻塞方式处理的Micronaut数据,并具有更高的可扩展性?
假设我的微服务公开了一个基于ReactiveX的反应式端点,并且必须访问一个阻塞数据源,抛出Micronaut Data JDBC (例如,在生产版本中还没有Oracle R2DBC ),从上面可以清楚地看到,它在访问数据时“将使用配置I/O线程池”。我是不是完全失去了反应式端点的好处?
这是我与Micronaut的第一个项目,我有几个项目是反应式的。我远不是反应式最佳实践的专家,但我记得我读过几篇博客:如果你有阻塞源,请避免使用反应式堆栈。我还记得我曾经读过,将非阻塞和阻塞设计混合在一起可能会产生更糟糕的结果,主要是因为Eventloop (例如:Netty)是设计的。由于我将与ReactiveX和关系数据库一起使用Micronaut,一些案例与R2DBC一起使用,而另一些案例与JDBC一起使用,因此我将感谢您对我的疑问的任何评论。
发布于 2020-11-16 21:13:42
您并没有完全失去这些好处,因为如果您有不阻塞的HTTP请求,您可以用JDBC逻辑组合这些操作。
但是,如果您希望使用R2DBC实现真正的无阻塞,请参阅https://github.com/micronaut-projects/micronaut-r2dbc/
https://stackoverflow.com/questions/64485758
复制相似问题