Задержанный рабочий завершает работу, когда база данных недоступна - PullRequest
0 голосов
/ 04 сентября 2018

Я использую отложенную работу с бэкэндом ActiveRecord, используя mysql в распределенной системе. Всякий раз, когда я перезагружаю базу данных mysql, рабочие просто останавливаются. Согласно журналу, каждый работник пытается воссоединиться 8 раз с 5-секундными интервалами, а затем выходит с сообщением FATAL -- : MySQL client is not connected.

Это означает, что каждый раз, когда я перезагружаю базу данных, я также должен перезапускать всех своих работников.

Есть ли способ увеличить количество попыток переподключения?

1 Ответ

0 голосов
/ 04 сентября 2018

В работе: class MyJob < ActiveJob::Base retry_on(YourMySQLException, wait: 10.seconds, attempts: 10) end

Если вы хотите, чтобы это повторяющееся поведение использовалось по умолчанию для всех ваших заданий, рассмотрите возможность помещения этой строки в ApplicationJob, и все ваши задания наследуются от нее.

Официальная документация имеет значения по умолчанию, отличные от тех, которые вы вывели из журналов, но я думаю, это не имеет значения => https://edgeapi.rubyonrails.org/classes/ActiveJob/Exceptions/ClassMethods.html#method-i-retry_on

Тем не менее, другой вопрос может быть: зачем вам перезапускать mysql? Это, вероятно, не должно происходить в производственной среде ...

...