Из официальной документации по https://docs.microsoft.com/azure/cosmos-db/change-feed-functions
Контейнер аренды: Контейнер аренды поддерживает состояние для нескольких динамических экземпляров Azure без функции сервера и обеспечивает динамическое масштабирование. Этот арендный контейнер можно создать вручную или автоматически с помощью триггера функций Azure для Cosmos DB. Чтобы автоматически создать контейнер аренды, установите в конфигурации флаг CreateLeaseCollectionIfNotExists. Контейнеры секционированной аренды должны иметь определение ключа раздела / id.
Переходя ко второму вопросу, обработка ошибок. Справочный документ: https://docs.microsoft.com/azure/cosmos-db/troubleshoot-changefeed-functions
По умолчанию триггер функций Azure для Cosmos DB не будет повторять пакет изменений, если во время выполнения кода было необработанное исключение.
Если ваш код выдает необработанное исключение, текущий пакет изменений, который обрабатывался, теряется, потому что функция завершит работу, запишет ошибку и продолжит работу со следующим пакетом.
В этом сценарии лучший способ действий - добавить блоки try / catch в ваш код и внутри циклов, которые могут обрабатывать изменения, чтобы обнаружить любой сбой для определенного поднабора элементов и обработать их соответствующим образом (отправьте их другомухранилище для дальнейшего анализа или повторной попытки).
Итак, убедитесь, что в ваших операторах foreach/for
есть блоки try/catch
, обнаружите любое исключение, тупик, в котором произошел сбой документа, и переходите к следующему вbatch.
Этот подход является общим для всех триггеров функций на основе событий, таких как Event Hub. Для справки: https://hackernoon.com/reliable-event-processing-in-azure-functions-37054dc2d0fc
Если вы хотите сбросить триггер Cosmos DB, чтобы вернуться и воспроизвести документы с самого начала, после того, как триггер уже работает в течение некоторого времени, вам необходимо:
- Остановите функцию Azure, если она в данный момент работает.
- Удалите документы из коллекции аренды (или удалите и заново создайте коллекцию аренды, чтобы она была пустой)
- Установитьатрибут
StartFromBeginning
CosmosDBTrigger в вашей функции имеет значение true. - Перезапустите функцию Azure. Теперь он будет читать и обрабатывать все изменения с самого начала.