JavaWebFlux Mono一直运行到完成
我有一个函数,它做了很多事情,最终返回一个Mono
如果我有一个这样的处理程序:
fun handleSomething(request: ServerRequest): Mono<ServerResponse> {
return longRunningMethod().flatMap {
ServerResponse.ok.build()
}
}
这将起作用,但在完成长时间运行的方法之前,它不会返回响应
我想做的是启动长时间运行的方法,但立即返回响应,如下所示:
fun handleSomething(request: ServerRequest): Mono<ServerResponse> {
longRunningMethod()
return ServerResponse.ok.build()
}
问题是,一旦响应被发送(基本上是立即发送的),它似乎只是中止了longRunningMethod()
有没有办法保持longRunningMethod()
运行直到它实际完成,即使请求已完成
# 1 楼答案
很难说清楚,因为我们在这里遗漏了很多上下文
但我认为该任务(似乎正在生成报告)与控制器没有严格的联系,这可能不属于这里。相反,您可以从控制器发送应用程序事件,并让事件侦听器处理它
默认情况下,事件在当前线程中处理,因此您必须确保使用该
ApplicationEventMulticaster
配置一个Executor
。最后,从HTTP的角度来看,报告是否生成似乎并不重要,因此您可以将它们完全解耦从理论上讲,您可以执行
longRunningMethod().subscribe()
,但不进行检查就让控制器运行这种副作用是不对的。而且测试也会更加困难