Функции Azure: переход на ядоблок без повторных попыток при возникновении определенного исключения - PullRequest
0 голосов
/ 18 октября 2018

У меня есть функция, запускаемая BLOB-объектами, в которой данные десериализуются из строки Json, а затем выполняется дальнейший процесс и сохраняется данные в дБ.

Моя функция запуска BLOB-объектов max retry установлена ​​в 5Означает, что в случае сбоя процесса BLOB-объекта он будет повторяться 5 раз, а затем перемещать BLOB-объект к отравленному BLOB-объекту.

Если десериализация не удалась, нет необходимости повторять его 5 раз.Итак, если исключение десериализации выброшено, мне нужно переместить BLOB-объект, чтобы отравить BLOB-объект без повторной попытки.Есть ли способ справиться с этим?

Ответы [ 2 ]

0 голосов
/ 24 июля 2019

Более чистым способом было бы установить maxDequeueCount в 1. Добавьте следующее в ваш host.json файл:

"extensions": {
  "queues": {
      "maxDequeueCount": 1
  }
}

Это фактически устанавливает максимальное количество попыток равным 0и сообщение добавляется в очередь ядовитых BLOB-объектов, как только исключение всплывает в вашей функции.

Документация довольно запутанная, поскольку настройка находится в разделе очередей и не выглядитсвязанные с триггером BLOB-объектов.

Мне удалось найти это в документации по WebJobs: https://docs.microsoft.com/en-us/azure/visual-studio/vs-storage-webjobs-getting-started-blobs#how-to-handle-poison-blobs

0 голосов
/ 18 октября 2018

Для такого случая нет встроенного решения afaik, но вы можете добавить выходную привязку в очередь отравлений и вручную вставить сообщение в описанной здесь форме:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#trigger---poison-blobs

Сообщение очереди для ядовитых BLOB-объектов - это объект JSON, который содержит следующие свойства:

FunctionId (в формате .Functions.)

BlobType ("BlockBlob" или "PageBlob"")

ContainerName

BlobName

ETag (идентификатор версии BLOB-объекта, например:" 0x8D1DC6E70A277EF ")

[FunctionName("blobtrigger")]
public static async Task Run(ILogger log, ExecutionContext executionContext,
    [BlobTrigger("blobs/{name}")] Stream blob,
    [Queue("webjobs-blobtrigger-poison")] CloudQueue poisonQueue)
{
    try {
        // do something
        throw new JsonSerializationException();
    }
    catch (JsonSerializationException ex)
    {
        log.LogError(ex, ex.Message);
        await poisonQueue.AddMessageAsync(new CloudQueueMessage()); // your message
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...