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

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

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

Следующий код - мой WebJob для объединения сообщений очереди.

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

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)

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

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

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

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

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 Continuous вместо того, чтобы эти сообщения перемещались в очереди отравлений?

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

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

Другие вопросы по тегам