如何在Spring Reactive Mongo中立即返回错误?

时间:2018-10-07 09:36:28

标签: spring mongodb spring-webflux

将文档保存到mongodb时,我正在测试一些错误处理。为了触发错误,我在spring成功启动后停止了mongo服务器。然后,我发送了保存文档的请求。

由于无法连接到mongo服务器而导致代码失败后不久,但是请求需要65多秒才能返回邮递员中的错误。

抛出异常后,有没有办法立即返回错误?例如ConnectException

我当前用于处理保存错误的代码:

return myRepository
    .save(doc)
    .map { ResponseEntity(mapOf(Pair("id", it.id)), HttpStatus.OK) }
    .onErrorReturn( ResponseEntity(emptyMap(), HttpStatus.INTERNAL_SERVER_ERROR))

postman image showing 65+ second loading time

1 个答案:

答案 0 :(得分:2)

由于超时处于mongo级别,您不能仅在端点上覆盖它,而是可以在反应式管道中引入另一个超时,如下所示:

return myRepository
.save(doc)
.timeout(Duration.ofSeconds(1))
.onErrorReturn( ResponseEntity(emptyMap(), HttpStatus.INTERNAL_SERVER_ERROR))
.map { ResponseEntity(mapOf(Pair("id", it.id)), HttpStatus.OK) }

请注意!!!!  引入的超时解决了您快速返回错误的问题,但下划线mongo连接尚未挂起,直到达到mongo超时为止。也许更好的选择可能是调整默认的mongo连接超时并使用反应性管道来释放Web服务器线程。

我希望它能为您提供帮助