Было бы полезно увидеть фактическое сообщение об ошибке из операции insert_one()
, но «для сбоя требуется около 30 секунд», что может быть связано с таймаутом выбора сервера по умолчанию. Вы можете настроить это с помощью опции строки соединения serverSelectionTimeoutMS
.
Если вы подключаетесь к набору реплик, я бы посоветовал сохранить этот тайм-аут немного выше ожидаемого времени для завершения отработки отказа. Выборы набора реплик состояния:
Среднее время, по истечении которого кластер выбирает новый первичный элемент, обычно не должно превышать 12 секунд
На практике это может оказаться короче. Поддерживая время ожидания выбора сервера выше ожидаемого времени переключения при сбое, вы позволите драйверу изолировать ваше приложение от ошибки (за счет времени ожидания).
Если вы не подключаетесь к набору реплик, не стесняйтесь понизить serverSelectionTimeoutMS
до более низкого значения, хотя оно все еще больше, чем ожидаемая задержка для вашего mongod
(автономного) или mongos
(сегментированного кластера) узла.
Обратите внимание, что поскольку выбор сервера происходит в цикле , опция строки подключения connectTimeoutMS
не повлияет на задержку, которую вы видите. Уменьшение времени ожидания подключения позволит драйверу внутренне отказаться при попытке подключения к недоступному серверу, но выбор сервера будет по-прежнему блокировать до serverSelectionTimeoutMS
(и, вероятно, повторять попытки подключения к серверу во время этого цикла).