Как поставить в очередь запрос, полученный от триггера BLOB-объекта? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть приложение-функция, которое запускается при загрузке или обновлении BLOB-объектов. Но по моему требованию мой контейнер может получать тысячи больших двоичных объектов одновременно (клиент будет загружать большие двоичные объекты в контейнер в виде пакета). В этом случае, как я знаю, функция app будет работать параллельно для каждого большого двоичного объекта в контейнере. Но мне нужно обработать их в очереди. Итак, я думаю использовать здесь хранилище очередей. Всякий раз, когда загружается большой двоичный объект, позвольте мне добавить это имя большого двоичного объекта в качестве сообщения очереди в хранилище очередей с помощью приложения-функции «Триггеры BLOB-объектов», и тогда у меня будет приложение «Функция триггера очереди», которое будет запускать и обрабатывать этот блок в очереди. Поправьте меня, если мой подход неверен? Кроме того, мне нужно знать, есть ли способ добавить сообщение очереди из приложения функции.

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Вы должны использовать в своем сценарии Azure Сетка событий pu sh -pull шаблон событий, где учетная запись хранения будет отправлять sh событие непосредственно в обработчик подписки очереди хранения.

Это решение не требует кодирования.

1 голос
/ 30 марта 2020

Ваш подход правильный. Я сделал то же самое в своем приложении. Когда несколько пользователей загружали изображения в BLOB-объекты, я добавлял BLOB-объекты name и url в очередь хранения. Вы можете создать Azure функцию для обработки сообщения из очереди, но убедитесь, что ваша Azure функция batchSize имеет значение 1

Azure Функция Размер пакета запуска триггера очереди хранения по умолчанию равен 16, и она обработает 16 сообщений в параллели. хост. json

Пример Код API для создания нового объекта и загрузки сведений об объекте в очереди.

await this.adRepository.AddEntity(ad);           
        var adDto = this.mapper.Map<AzureSearchServiceDto>(ad);

        //Push data in Queue
        await this.storageService.PushMessageIntoQueue(AppConstraint.ImageVerificationQueue, adDto .ToJson());

Функция Проверка изображения и создание миниатюр изображений

[FunctionName("ImageVerificationFunction")]
    public async Task Run([QueueTrigger("%ImageVerificationQueue%", Connection = "StorageConnection")]string message, ILogger log)
    {
        log.LogInformation($"ImageVerificationFunction processed: {message}");
        var azureSearchServiceDto = JsonConvert.DeserializeObject<AzureSearchServiceDto>(message);
        await this.imageVerificationService.Verify(azureSearchServiceDto);
    }

storageService - это моя специальная служба для отправки сообщений в очередь хранения

...