当前位置: 首页 > 知识库问答 >
问题:

Spring Boot WebFluxendpoint使用哪个CoroutineScope

通飞尘
2023-03-14

在Spring Boot WebFlux应用程序中,我们有许多endpoint(REST和GraphQL),它们返回某物的monoflux。这些endpoint调用的代码都是非阻塞的,但是我们不是使用reactor,而是使用Kotlin Coroutines来编写所有这些非阻塞的代码。我们可以使用诸如kotlinx.coroutines.reactor.mono()这样的方法将我们的协程包装在mono(以及用于flux结果的相应flux()方法)中。

然而,为了调用这些方法,我们首先需要一个coroutineScope来包装整个请求(并处理诸如取消主“入口点”coroutine启动的任何子coroutine之类的事情)。这里似乎有几种选择。例如,我们可以构造一个新的coroutineScope并选择一个调度器,例如coroutineScope(dispatchers.default).mono{...。或者我们可以构造自己的类来表示整个HTTP请求,并让它实现coroutineScope,如这里所示的Android活动

这个问题中隐含的是工作应该在什么线程(或线程池)上执行的选择。我们可以自己创建一个线程池,但是Spring Boot WebFlux已经创建了自己的线程池,用于在非阻塞环境中处理HTTP请求,所以也许尝试留在当前线程中(或者留在那个线程池中)会更好?如果这是最好的方法,那么有没有一种方法可以获得线程池并使coroutine在其上运行呢?

共有1个答案

宓和同
2023-03-14

由于在Spring WebFlux中,HTTP交换不是针对特定线程的,globalscope.mono(dispatchers.unincontined)可能是最好的选择。

请注意,dispatchers.uncontined是一个实验性API,以及将受到惰性可迭代流深刻影响的Coroutines通道API。所以我建议您等待Spring官方对任何生产代码的Coroutines的支持。

 类似资料:
  • 问题内容: 我有一个Jenkins主服务器(在一个小的Linux机器上运行)和一个Jenkins从机(在“正确的” XP计算机上运行)。 我已经配置了所有要在Windows XP从属服务器上运行的副臂。 不幸的是,每次在该从属服务器上运行构建时,由于以下错误,构建都会失败: 我知道此错误是由于包含这些工件的存储库定义不正确造成的,因为已使用的存储库是在settings.xml中定义的。因此,我的问

  • 问题内容: 我需要创建一个数据传输对象,该对象将用于存储从数据库检索到的记录。在此数据传输对象中,我需要声明一个数字字段。对于哪个更好 -int 或 Integer 如果我将字段定义为Integer,如果我要从DB中检索2000条以上的记录,会由于’Integer’类型而对性能产生影响吗? 提前致谢。 问题答案: 是一个更好的选择,因为它可以处理;为,将成为,默默的,如果被使用。否则,它可能会引发

  • 您应该使用哪个版本的UUID?我看到很多线程解释每个版本需要什么,但我很难找出什么最适合什么应用程序。

  • 问题内容: 有两种JRE可用。Java虚拟机:IBM对的Sun。 有没有一种方法可以通过JavaScript或Java发出的命令知道我正在使用哪个JRE。 问题答案: http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

  • 问题内容: 我一直在尝试通过Maven 集成在GlassFish V3中部署Java 。虽然我发现了一些插件,但它们看起来都不是很活跃: Maven Glassfish插件 Eskato在Maven上的Wordpress博客 而且我从Eskato的Blog中获得了最多的信息,该博客写于2008年3月,所以我不知道GlassFish Maven集成的状态如何,也找不到适合的插件。使用Maven Gl

  • 问题内容: 有一个序列,我需要找出哪个table.column获取其值。据我所知,Oracle没有跟踪这种关系。因此,在源代码中查找序列是唯一的方法。是对的吗? 任何人都知道某种找到这种序列表关系的方法吗? 问题答案: 在数据库中,您可以像这样搜索架构中所有已存储的代码: 在SQL Developer中,有一份报告可以做到这一点。