Функция Azure не получает сообщения из очереди хранения - PullRequest
0 голосов
/ 13 декабря 2018

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

Функция

[FunctionName("Function1")]
    public static void Run([QueueTrigger("azurefunc", Connection = "StorageConnectionString")]string myQueueItem, TraceWriter log)
    {
        log.Info($"C# Queue trigger function processed: {myQueueItem}");

        // PERFORMANCE TEST
        for (int i = 0; i < 10000; i++)
        {
            for (int j = 0; j < 9000; j++)
            {
                // Do nothing.
                // Or do something
                string myAwesomeTempString = "How are you";
                myAwesomeTempString += "?";
            }
        }

        try
        {
            var queueMessage = new CloudQueueMessage (myQueueItem);
            QueueApi.DeleteMessage (QueueApi.AzureFunctionStorageQueue, queueMessage);
        }
        catch
        {

        }
    }

local.settings.json

{"IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "AZURE_STORAGE_CONNECTION_STRING",
    "AzureWebJobsDashboard": "AZURE_STORAGE_CONNECTION_STRING",
    "StorageConnectionString": "AZURE_STORAGE_CONNECTION_STRING",
    "serviceBusAccount": "SERVICE_BUS_CONNECTION_STRING"
  }}

Часть QueueApi

/// <summary>
    /// Creates instance of Queue Storage
    /// </summary>
    /// <param name="queueName">Name of queue storage</param>
    /// <returns>The instance of queue storage</returns>
    private static CloudQueue CreateStorageQueue (string queueName)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse ("AZURE_STORAGE_CONNECTION_STRING");
        CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient ();
        CloudQueue queue = queueClient.GetQueueReference (queueName);
        queue.CreateIfNotExists ();
        return queue;
    }

    /// <summary>
    /// Deletes message from queue.
    /// </summary>
    /// <param name="queue">The queue storage instance</param>
    /// <param name="message">Message to be deleted</param>
    public static void DeleteMessage (CloudQueue queue, CloudQueueMessage message)
    {
        CheckInstances ();

        if (message != null)
        {
            queue.DeleteMessage (message);
        }
    }

Я создал Azure Service Bus учетную запись только для проверки другойподход, но я действительно предпочел бы использовать Azure Storage Queue .

Может кто-нибудь помочь мне?

Большое спасибо

1 Ответ

0 голосов
/ 13 декабря 2018

Queue Trigger автоматически удалит входящее сообщение в конце выполнения функции, поэтому вам не нужно удалять его самостоятельно.Ваш код фактически создает новое сообщение с тем же содержанием, что и в функцию, и пытается удалить новое сообщение, которого нет в очереди.

Причина, по которой код не работаетAzure - это то, что вы, возможно, забыли добавить StorageConnectionString в настройках приложения.local.settings.json не публикуется в Azure, поскольку предназначен только для локальной разработки.

...