Атрибут FixedDelayRetry в функции Azure не работает должным образом

С момента выпуска последней сборки 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 раз:

введите здесь описание изображения

Что я делаю не так ?


person MarleneHE    schedule 13.01.2021    source источник


Ответы (1)


Политика повторных попыток приложения-функции не зависит от повторных попыток или отказоустойчивости, которую обеспечивает триггер. Политика повтора функции будет накладываться только поверх отказоустойчивого повтора триггера. О поведении при повторных попытках можно прочитать на странице здесь.

Поскольку для Azure Blob для параметра maxDequeueCount установлено значение 5 (см. -settings" rel="nofollow noreferrer">здесь), поэтому вы видите, что ваше сообщение повторяется несколько раз.

Для достижения желаемого результата вы можете определить для свойства maxDequeueCount в host.json значение 1.

person user1672994    schedule 13.01.2021
comment
Это сработало отлично, большое спасибо! Я все еще удивлен, что мой первоначальный обходной путь сработал в моей тестовой среде. Может быть, я еще чего-то не понимаю? - person MarleneHE; 14.01.2021