У нас есть 2 сервера: master
и slave
сервер. slave
сервер в основном используется для обработки отчетов. Все длительные фоновые процессы передаются на сервер slave
. Мы используем sidekiq
для фоновой обработки.
Теперь, когда отчет готов, мы создаем объект Download
, к которому прикреплен сгенерированный отчет. Поскольку процесс выполняется в slave
, нам нужно подключиться к master
, чтобы создать Download
объект. Код выглядит примерно так:
connection = MasterDbConnectionService.connect(tenant_name)
Download.create!(time_taken: time_taken, file: file) # Pseudo code
# Disconnect from the previously established connection
MasterDbConnectionService.disconnect(connection)
Но мы периодически сталкиваемся с
ActiveRecord :: ConnectionNotEstablished) "Не найден пул соединений с" первичным ".
Теперь, когда возникает это исключение, sidekiq повторяет задание и, таким образом, делает его крайне неэффективным. Я понимаю, что мы можем спасти исключение, но если соединение не будет установлено, мы не сможем создать объект Download
.
Одно из решений, которое приходит мне в голову, - это спасти исключение и продолжать попытки в течение 5 * 10 секунд. Но, похоже, это неправильный путь. Так какой должен быть подход к решению этой проблемы? Сценарий? Кто-нибудь?
Спасибо