В худшем случае вы никогда не сможете гарантировать, что работник не будет получать активность до того, как вы ее убьете.
Вы должны повернуть вспять - SWF-функции должны быть идемпотентными, то есть давать одинаковый результат, даже если они выполняются несколько раз для одного входа. Если у вас есть длительные действия (которые, как я полагаю, вы делаете), используйте heartbeats, чтобы SWF периодически знал, что ваши действия живы и здоровы (если у вас короткие действия, слишком низкие тайм-ауты активности). Теперь, когда развертывание приходит и убивает работника активности на одной машине, SWF запланирует убитые мероприятия для обработки на другой машине (потому что сердцебиение таймаут или активность таймауту!)
Если вы строите свою деятельность с сердцебиений (для длительной работы и небольших тайм-аутов для быстрой работы) вам никогда не нужно беспокоиться о развертываниях или сбоях в работе компьютера, поскольку в любой момент, когда работник по какой-либо причине сходит с ума, SWF планирует задачу другому работнику.
Вдоль этих линий, лучший способ развертывания это сделать ступенчатое развертывание - развертывание в разделе хостов в данный момент времени, и на основе их здоровья, переходите к более разделов до всех хостов обновлены. Это даст SWF пространство для планирования действий, убитых развертываниями, которые планируется запланировать, и поможет вам предотвратить быстро обнаруживаемые ошибки из-за распространения развертываний на остальную часть вашей системы.
Просто незначительное разъяснение. SWF не требует, чтобы действия были идемпотентными. Это гарантирует, что они вызываются не чаще одного раза. Разработчик рабочего процесса должен создать только идемпотентные действия и логику принятия решения, чтобы их безоговорочно повторить. –