Повторить удаление пула или заданий с помощью пакетной службы Azure?

Я использую это руководство Microsoft для отправная точка для использования пулов, заданий и контейнеров пакетной службы Azure.

Я немного изменил их код для удаления пулов и заданий, чтобы

// Cleanup Batch Account Resources
// Clean up Job
await batchClient.JobOperations.DeleteJobAsync($"{BatchConstants.JobIdPrefix}-{Guid}");
            
// Clean up Pool
await batchClient.PoolOperations.DeletePoolAsync($"{BatchConstants.PoolIdPrefix}-{Guid}");

Это отлично работает, когда я запускаю этот код локально, но когда он подходит к моей среде разработки, возникает проблема при удалении пула или задания (обычно задания). Я возвращаю статусный код ServiceUnavailable.

Когда я вручную вхожу на портал Azure, я вижу, что контейнер был удален без проблем (так что я знаю, что соединение может быть установлено и могу успешно удалить объекты Azure), но замечаю, что пул и задание все еще живы.

Похоже, что JobOperations или PoolOperations не имеют понятия о политиках повторных попыток, поэтому есть ли какой-либо другой способ заставить его повторить попытку удаления пулов и / или заданий еще несколько раз, если он вернет статус ServiceUnavailable? Или я должен просто попробовать это в основном в цикле for, который выполняется до 5 (или около того) раз, если возвращается неправильный код состояния, или продолжает работу с остальной частью программы, если возвращается хороший код состояния?

Спасибо за помощь.


person B. Witter    schedule 04.08.2017    source источник


Ответы (1)


Вы можете предоставить политику повтора для самого batchClient, которая будет применяться ко всем операциям, которые можно повторить (т. Е. Клиент будет автоматически повторять операцию от вашего имени, если это повторная операция). Например, чтобы добавить политику линейных повторов, которая повторяет каждые 5 секунд максимум 10 попыток:

batchClient.CustomBehaviors.Add(RetryPolicyProvider.LinearRetryProvider(TimeSpan.FromSeconds(5), 10))

Вы можете использовать любой из существующие политики повторных попыток или создайте свою собственную политику повторных попыток, реализовав IRetryPolicy.

Обычно ServiceUnavailable восстанавливается самостоятельно из-за временного сбоя или проблемы. Однако с учетом сказанного вам все равно может потребоваться обработка случаев, когда даже эти политики повторных попыток не работают после максимального количества попыток. Это будет зависеть от того, что приемлемо для вашего сценария, например, вы можете быть в порядке, если удаление задания завершается сбоем в течение длительного периода времени, но недопустимо, чтобы удаление пула завершалось сбоем в течение периода, превышающего некоторое время. Возможно, вы захотите включить более надежную обработку повторных попыток в этом случае или аварийное оповещение и уведомление в вашей системе.

person fpark    schedule 04.08.2017