Как мы можем обработать документ аренды космоса с помощью функции Azure? - PullRequest
1 голос
/ 16 октября 2019

Я новичок в функции Azure, недавно мы попытались использовать функцию CosmosDBTriggered, которая должна создавать документ аренды, мы заметили, что когда что-то изменилось в контейнере Cosmos, в документ аренды будет добавлена ​​новая запись,но мы не понимаем , что означают эти элементы и как мы можем использовать их в другом сценарии, вместо этого просто войдите в систему . Кроме того, иногда у нас может быть исключение в функции CosmosDBTriggered, в то время как исключение случается, наша функция просто останавливает себя, и мы теряем все измененные документы в этом случае, поэтому мы думаем , если есть какой-либо способ вернуть наши измененныеэлементы в последнем инициированном событии, используя документ аренды , но не уверены, что документ аренды может сказать нам, может кто-нибудь объяснить, если это возможно?

1 Ответ

2 голосов
/ 17 октября 2019

Из официальной документации по 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, чтобы вернуться и воспроизвести документы с самого начала, после того, как триггер уже работает в течение некоторого времени, вам необходимо:

  1. Остановите функцию Azure, если она в данный момент работает.
  2. Удалите документы из коллекции аренды (или удалите и заново создайте коллекцию аренды, чтобы она была пустой)
  3. Установитьатрибут StartFromBeginning CosmosDBTrigger в вашей функции имеет значение true.
  4. Перезапустите функцию Azure. Теперь он будет читать и обрабатывать все изменения с самого начала.
...