Очереди веб-заданий Azure не запускают веб-задания

Очереди веб-заданий Azure не запускают веб-задания. Если я передаю сообщение в двоичном формате в очереди?

Я отправил байты GOOGLE PROTOBUF как CloudMessage в хранилище очередей Azure. Но хранилище очередей Azure не проверяет связь и не передает это CloudMessage в мое непрерывно работающее веб-задание Azure, вместо этого эти сообщения перемещаются в Poison Queues?

Следующий код - это мое веб-задание для объединения сообщений очереди.

Программный файл:

public class Program
{
    // Please set the following connection strings in app.config for this WebJob to run:
    // AzureWebJobsDashboard and AzureWebJobsStorage
    public static void Main()
    {
        try
        {              

            JobHost host = new JobHost();
            //Following code ensures that the WebJob will be running continuously
            host.RunAndBlock();                
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

Function.cs

public class Function
{
    //This function will get triggered/Executed when new message is written on an Azure Queue called messagequeue   
    public static void ProcessMessageQueue([QueueTrigger("messagequeue")] string message)
    {
        #region WebAPI Call

        #endregion
    }
}

Код для добавления байтов сообщения в очередь Azure:

  private void PushPayloadBytesToAzureQueueStorage(byte[] payload)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["AzureWebJobsStorage"]);
        CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
        CloudQueue queue = queueClient.GetQueueReference("messagequeue");
        queue.CreateIfNotExists();
        CloudQueueMessage msg = new CloudQueueMessage(payload);
        queue.AddMessage(msg);
    }

В моем случае я добавлю сообщение в виде байтов в очередь, а затем это хранилище очереди должно отправить сообщение и запустить мое веб-задание, которое публикуется / выполняется в облаке Azure.

У меня есть сомнения по поводу приведенной ниже подписи метода.

 public static void ProcessMessageQueue([QueueTrigger("messagequeue")] string message)

Какой тип данных следует использовать для параметра message в приведенной выше сигнатуре метода, поскольку сообщения успешно добавлены в хранилище очередей, но очередь не запускает функцию Azure, и все сообщения очереди перемещаются в Poison Queue.

Что мне здесь не хватает?

Оцените ваши мысли по этому поводу.

Заранее спасибо!


person Vignesh    schedule 10.11.2017    source источник


Ответы (1)


Основываясь на вашем коде, я проверил эту проблему. Я передал payload как System.Text.UTF8Encoding.UTF8.GetBytes("hello world " + DateTime.Now), тогда я мог бы получить строковый параметр message в моей функции ProcessMessageQueue.

Как Как запустить функцию при получении сообщения очереди гласит следующее:

Помимо string, параметром может быть массив байтов, объект CloudQueueMessage или POCO, который вы определяете.

Для байтового массива или параметра CloudQueueMessage вы можете обратиться к следующему фрагменту кода:

System.Text.UTF8Encoding.UTF8.GetString(message); //for byte array

System.Text.UTF8Encoding.UTF8.GetString(message.AsBytes); //for CloudQueueMessage object

Хранилище очередей Azure не проверяет связь и передает это CloudMessage в мое непрерывно работающее веб-задание Azure, вместо этого эти сообщения перемещаются в Poison Queues?

SDK WebJobs будет обрабатывать функцию до 5 раз для обработки вашего сообщения в очереди. Сообщение будет перемещено в подозрительную очередь, более подробную информацию вы можете найти в описании в разделе Как обрабатывать опасные сообщения.

Я предположил, что вам нужно проверить формат кодировки вашего ввода. И вы можете проверить журналы в своем лазурном хранилище, более подробную информацию вы можете найти на здесь. Более того, вы также можете использовать try-catch-throw в своей ProcessMessageQueue функции, чтобы сузить эту проблему.

person Bruce Chen    schedule 13.11.2017