Gearman уже должен справиться с этим.Пока у вас есть некоторые работники, которые специализируются на обработке заданий с ненадежными зависимостями и не справляются с другими заданиями, наряду с некоторыми работниками, которые либо выполняют все задания, либо просто работают без ненадежных зависимостей.
Все, что вам нужно сделать, это добавить некоторый код ненадежным работникам зависимости, чтобы они принимали задания только после того, как проверили, что зависимая служба запущена, если служба не работает, просто заставьте их немного подождать иповторно протестируйте службу (и продолжайте до бесконечности), как только служба будет запущена, попросите их присоединиться к серверу gearmand, выполнить работу, вернуться к работе, повторно протестировать службу и т. д. и т. д.
Пока зависимая служба не работает, рабочиекоторые не обрабатывают задания, для которых требуется служба, будут продолжать проходить через очередь заданий для других заданий.Gearmand не будет блокировать всю очередь заданий (или работника) на одном типе задания, если есть работники, которые могут обрабатывать другие типы заданий.
Ключ к пониманию того, как вы определяете свои типы заданий и работников.
РЕДАКТИРОВАТЬ -
А-а-а, я знал, что мои размышления немного истощены (я писал свою систему редукторов около года назад и с тех пор не касался ее).Мое решение проблемы такого типа состояло в том, чтобы все работники, которые обычно обрабатывают зависимые задания, отменили свою возможность обработки зависимых заданий на сервере gearmand после обнаружения сбоя в зависимой службе.(и все работники, которые в настоящее время пытаются завершить эту работу, должны вернуть ошибку.) Как только служба станет резервной, попросите тех же работников перерегистрировать свою способность справляться с этой работой.Учтите, что для этого работникам необходим другой канал связи о статусе зависимых служб.
Надеюсь, это поможет