Я бы хотел использовать MySQL как очередь заданий. Несколько машин будут производить и потреблять рабочие места. Рабочие места должны быть запланированы; некоторые могут работать каждый час, некоторые каждый день и т. д.
Это кажется довольно простым: для каждого задания есть столбец «nextFireTime», и рабочие машины ищут работу с помощью nextFireTime, меняют статус записи на «inProcess», а затем обновляют nextFireTime, когда задание заканчивается.
Проблема возникает, когда работник умирает молча. Он не сможет обновить nextFireTime или вернуть статус в состояние «бездействия».
К сожалению, задания могут быть долгосрочными, поэтому поток жнецов, который ищет задания, которые слишком долго были в Process, не подходит. Нет значения времени ожидания, которое бы работало.
Кто-нибудь может предложить шаблон проектирования, который бы правильно обрабатывал ненадежные рабочие машины?