Как немедленно вернуть ошибку в Spring Reactive Mongo? - PullRequest
0 голосов
/ 07 октября 2018

Я проверял некоторую обработку ошибок при сохранении документа в mongodb.Чтобы вызвать ошибку, я остановил сервер Монго после успешного запуска весны.Затем я отправил запрос на сохранение документа.

Вскоре после сбоя кода, потому что он не может подключиться к серверу Монго, но запрос занимает более 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 голосов
/ 07 октября 2018

Поскольку тайм-аут находится на уровне монго, вы не можете переопределить его только для своей конечной точки, но вы можете ввести другой тайм-аут в своем реактивном конвейере, как показано ниже:

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

Обратите внимание !!!!введенный тайм-аут решает вашу проблему быстрого возврата ошибки, но соединение монго подчеркивания еще не завершено, пока не достигнет таймаута монго.Возможно, лучшим выбором может быть настройка времени ожидания соединения по умолчанию и использование реактивного конвейера для быстрого освобождения потоков веб-сервера.

Я надеюсь, что он может помочь вам

...