Очереди веб-заданий 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
функция, чтобы сузить эту проблему.