【发布时间】:2018-09-12 14:52:18
【问题描述】:
我有一个函数可以做很多事情并最终返回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() 一直运行直到它真正完成,即使请求已经完成?
【问题讨论】:
-
longRunningMethod 是做什么的?如果应用程序失败(响应状态是否仍然有效),您的应用程序应该如何表现?那个 longRunningMethod 是否以任何形式读取请求?
-
它并没有真正从请求中读取任何内容(除了 queryParam)。在发送响应之前,任何要读出的内容都将被读取并作为参数发送到
longRunningMethod()。它本质上是一个需要很长时间才能生成的报告。随后的不同请求将不得不处理检索生成的数据。在这种情况下,200仅表示它已启动。
标签: java spring kotlin spring-webflux project-reactor