Как лучше всего управлять сбоями соединения (и переподключением) к реплике mongodb, установленной в ruby ​​на рельсах? - PullRequest
0 голосов
/ 26 августа 2011

Я использую набор реплик в mongo, одним из клиентов, подключающихся к этому набору, является приложение Rails, использующее MongoMapper в качестве объектного сопоставителя. Я хочу убедиться, что в случае, если я получу Mongo :: ConnectionFailure, потому что что-то пошло не так с одним из узлов, он будет правильно подключен, официальные документы Mongodb утверждают, что клиент несет ответственность за rescue / reconnect .

Теперь я мог бы просто добавить спасательный блок в качестве окружающего фильтра, но это вряд ли кажется хорошим решением (наверняка не ответственность контроллеров).

Что было бы хорошим местом для спасения / повторного подключения, кроме добавления его в MongoMapper?

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Это на самом деле сложная проблема. Вы можете получить эту ошибку по нескольким причинам.

  1. Набор реплик полностью недоступен.
  2. Процесс mongos недоступен (в заштрихованных конфигах)
  3. Набор реплик находится в процессе выбора нового основного элемента.

В идеале # 3 является наиболее распространенной причиной.

В случае № 3 вы можете поймать исключение, подождать секунду и повторить попытку. Возможно, вам придется повторить попытку несколько раз, прежде чем сдаться (что, если это № 1?)

Таким образом, случай, который вы обычно хотите решить, - это изменение основных цветов, которое обычно занимает несколько секунд. Тем не менее, вы не можете ждать вечно, поэтому вы все равно должны быть в состоянии обработать «сбой» через некоторое количество секунд.

Этот код обработки исключений, вероятно, находится где-то в коде MongoMapper . И эй, это OSS, так что это может быть сделано. Но следует признать, что существует несколько потенциальных причин сбоя соединения, поэтому даже примера в документации может быть недостаточно.

При использовании наборов реплик вам также следует учитывать вашу запись о записи . Они также могут генерировать исключения, в том числе некоторую форму «неосновного» исключения, которое, вероятно, также требует специального журнала.

0 голосов
/ 02 ноября 2013

Насколько я знаю, MongoMapper использует драйвер mongodb, который не переподключается.Вы, вероятно, должны использовать Mongoid, который имеет эту функцию, чем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...