如何在 Spring Reactive Mongo 中立即 return 错误?
How to return error immediately in Spring Reactive Mongo?
我正在测试将文档保存到 mongodb 时的一些错误处理。为了触发错误,我在 spring 成功启动后停止了 mongo 服务器。然后我发送了保存文档的请求。
代码失败后不久,因为它无法连接到 mongo 服务器,但请求需要 65 秒以上才能 return 邮递员中的错误。
有没有办法在抛出异常后立即return错误?例如ConnectException
我当前处理保存错误的代码:
return myRepository
.save(doc)
.map { ResponseEntity(mapOf(Pair("id", it.id)), HttpStatus.OK) }
.onErrorReturn( ResponseEntity(emptyMap(), HttpStatus.INTERNAL_SERVER_ERROR))
由于超时处于 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) }
注意!!!!
引入的超时解决了 return 快速错误的问题,但下划线 mongo 连接处于挂起状态,直到达到 mongo 超时。可能更好的选择可能是调整默认的 mongo 连接超时并使用响应式管道让 Web 服务器线程尽快释放。
希望对您有所帮助
我正在测试将文档保存到 mongodb 时的一些错误处理。为了触发错误,我在 spring 成功启动后停止了 mongo 服务器。然后我发送了保存文档的请求。
代码失败后不久,因为它无法连接到 mongo 服务器,但请求需要 65 秒以上才能 return 邮递员中的错误。
有没有办法在抛出异常后立即return错误?例如ConnectException
我当前处理保存错误的代码:
return myRepository
.save(doc)
.map { ResponseEntity(mapOf(Pair("id", it.id)), HttpStatus.OK) }
.onErrorReturn( ResponseEntity(emptyMap(), HttpStatus.INTERNAL_SERVER_ERROR))
由于超时处于 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) }
注意!!!! 引入的超时解决了 return 快速错误的问题,但下划线 mongo 连接处于挂起状态,直到达到 mongo 超时。可能更好的选择可能是调整默认的 mongo 连接超时并使用响应式管道让 Web 服务器线程尽快释放。
希望对您有所帮助