Во-первых, это может закончиться вопросом нуба, но все же ... Я пытаюсь найти хорошее решение для концепции, и Google просто не работает для меня.
I создаю импорт с Azure функциями. Функция запускается, когда BLOB загружается в контейнер хранения BLOB. Функция читает файл и передает каждую запись импорта в очередь проверки. При сбое проверки объект будет передан в очередь ошибок. Когда проверка завершится успешно, объект будет поставлен в очередь в очереди успеха.
Другая функция считывает очередь успеха и начинает запись объектов в хранилище таблиц. При сбое этого процесса объект будет поставлен в очередь на ошибку.
Объекты в очереди ошибок обрабатываются и сохраняются, чтобы пользователь знал, что пошло не так, а исходные данные импорта сохраняются, чтобы пользователь мог исправить ошибка.
На мой взгляд, это лучший способ реализовать процедуру импорта с функциями. Это много функций, я знаю ... Но все они несут одну ответственность (например, чтение файла, проверка и т. Д. c и т. c).
Теперь моя проблема в том, когда объект сохранен успешно ИЛИ когда неудачный объект сохранен успешно, я также отправляю сообщение в очередь состояний, сообщающее, что импорт для определенного объекта успешно завершен или нет. Другая функция Azure обрабатывает эту очередь состояния и обновляет ОДНУ запись в таблице хранения с последним статусом. Статус для импорта выглядит так:
CorrelationId <-- The import identifier
StartedAt (date time)
TotalEntries (int)
Succeeded (int)
Failed (int)
CompletedAt (date time)
Очевидно, что Успешное или Неудачное int увеличивается на единицу для каждого сообщения в очереди. Кроме того, когда размер очереди увеличивается, количество экземпляров функций AZ увеличивается, и другие функции начинают обновлять запись в хранилище таблицы одновременно, что приводит к ошибкам. Я могу выбрать использование ETag, что приводит к сбою некоторых записей в очереди (и это медленно !!), или я могу установить ETag в «*», что делает процесс намного быстрее, но тогда я просто пропускаю данные. Как вы должны справиться / решить такую ситуацию?
Спасибо большое!