gpt4 book ai didi

java - Webflux Mono - 继续运行直至完成

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:12 25 4
gpt4 key购买 nike

我有一个函数可以做很多事情并最终返回一个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() 保持运行直到它实际完成,即使请求已完成?

最佳答案

很难确定,因为我们在这里缺少很多上下文。

但我认为该任务(似乎正在生成报告)与 Controller 没有严格链接,这可能不属于这里。相反,您可以从 Controller 发送应用程序事件并让事件监听器处理它。

默认情况下,事件在当前线程中处理,因此您必须确保使用该 ApplicationEventMulticaster 配置一个 Executor。最后,从 HTTP 的角度来看,是否生成报告似乎并不重要,因此您可以将它们完全解耦。

理论上,您可以执行longRunningMethod().subscribe(),但在没有检查的情况下从 Controller 运行这种副作用感觉不太正确。而且测试起来也会更加困难。

关于java - Webflux Mono - 继续运行直至完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52298069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com