С момента выпуска последней сборки Microsoft.Azure.WebJobs теперь можно настроить политику повторных попыток для функции Azure с помощью такого атрибута, как [FixedDelayRetry]
. Меня очень заинтересовала эта функция, поскольку у меня есть функция триггера больших двоичных объектов, которая по умолчанию повторяет попытку пять раз в случае сбоя, и меня не интересовала функция политики повторных попыток. Я хотел, чтобы функция не повторяла попытки в случае сбоя или только один раз.
Итак, я настроил этот атрибут в своей функции, как вы можете видеть ниже, и указал количество максимум одной попытки, если функция не работает:
public class Function1
{
private readonly IGremlinService _gremlinService;
private readonly TelemetryClient _telemetryClient;
public Function1(IGremlinService gremlinService, TelemetryConfiguration telemetryConfiguration)
{
this._gremlinService = gremlinService;
this._telemetryClient = new TelemetryClient(telemetryConfiguration);
}
[FunctionName(nameof(Function1))]
[FixedDelayRetry(1, "00:00:10")]
public async Task Run([BlobTrigger("files/{directory}/{name}.pdf", Connection = "AzureWebJobsStorage")] Stream myBlob, string name, ILogger logger)
{
try
{
//my lengthy code not related to the issue
}
}
}
Когда я пробую этот код в своей тестовой среде с эмулятором хранилища и эмулятором CosmosDb, он работает отлично, функция повторяет попытку только один раз, когда сталкивается с исключением.
Однако, когда я запускаю свою функцию на платформе Azure, вместо того, чтобы повторить попытку только один раз в случае сбоя, она повторяет попытку... девять раз. Я устанавливаю максимальное количество попыток равным 5, и на этот раз функция повторила попытку 25 раз. У меня такое ощущение, что вместо того, чтобы повторять количество попыток, указанное в атрибуте, функция умножает это число на политику повторов по умолчанию, равную 5. Ниже вы можете увидеть мои журналы, где функция явно повторяла попытку 10 раз:
Что я делаю не так ?