Исключите очередь хранилища Azure из функции Azure - PullRequest
0 голосов
/ 29 сентября 2019

Я искал примеры для того, чтобы легко убрать очередь из хранилища Azure так же, как вы можете поместить элемент в очередь (добавив IAsyncCollector в метод Run).но увы, безуспешно.Единственные вещи, которые я нашел, это поставить в очередь элементы или реагировать на элементы, добавляемые в очередь.

На моем локальном сервере запущено приложение, которое периодически вызывает функцию (и продолжает вызывать, пока очередь не опустеет).) чтобы получить предметы из очереди.Я хочу сделать это с помощью функции Azure.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Пожалуйста, проверьте этот документ о ICollector: ICollector с очередью хранилища Azure .

ICollector и IAsyncCollector могут использоваться в качестве типов параметров для выходных привязок очереди хранения.

На данный момент привязка функции Azure поддерживает только привязку вывода для записи сообщений в очередь.Или Вы можете использовать триггер очереди для извлечения сообщения, если вам не нужно вызывать его с помощью HTTP-запроса.

Если вам нужно использовать HTTP-запрос, предположим, что вам нужно создать функцию триггера HTTP, а затем получить и удалитьочередь для реализации действия удаления из очереди, как показано ниже:

public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        // Parse the connection string and return a reference to the storage account.
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Environment.GetEnvironmentVariable("AzureWebJobsStorage"));
        CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

        // Retrieve a reference to a queue
        CloudQueue queue = queueClient.GetQueueReference("myqueue");

        // Async dequeue the message
        CloudQueueMessage retrievedMessage = await queue.GetMessageAsync();
        Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);

        //Process the message in less than 30 seconds, and then delete the message
        await queue.DeleteMessageAsync(retrievedMessage);

        return  (ActionResult)new OkObjectResult(retrievedMessage.AsString);

    }

enter image description here

0 голосов
/ 29 сентября 2019

Почему бы вам не создать функцию webhook, которую вызывает ваше приложение, а затем внутри функции вы можете удалять элементы по мере необходимости, используя стандартный API очереди хранения для любого языка, который вы используете.

...