Azure WebJob队列没有触发WebJobs如果我以二进制格式将消息传递给队列?
我已将 GOOGLE PROTOBUF 字节作为CloudMessage推送到Azure队列存储中。但是,Azure Queue存储没有ping并将该CloudMessage传递给我的Azure Continuous运行WebJob而不是那些,那些消息正在转移到Poison Queues?
以下代码是我的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云中发布/运行的 Web作业。
我对以下方法签名有疑问。
public static void ProcessMessageQueue([QueueTrigger("messagequeue")] string message)
我应该将哪种数据类型用于上述方法签名中的消息参数,因为消息已成功添加到队列存储中,但队列不会触发Azure功能,并且所有队列消息都会移动到Poison Queue
我在这里缺少什么?
欣赏你对此的看法。
提前致谢!
答案 0 :(得分:1)
根据您的代码,我检查了这个问题。我将payload
作为System.Text.UTF8Encoding.UTF8.GetBytes("hello world " + DateTime.Now)
传递,然后我可以在message
函数下检索字符串参数ProcessMessageQueue
。
如How to trigger a function when a queue message is received所述:
除
string
外,参数可以是字节数组,CloudQueueMessage
对象或您定义的POCO。
对于字节数组或CloudQueueMessage
参数,您可以参考以下代码段:
System.Text.UTF8Encoding.UTF8.GetString(message); //for byte array
System.Text.UTF8Encoding.UTF8.GetString(message.AsBytes); //for CloudQueueMessage object
Azure队列存储没有ping并将该CloudMessage传递给我的Azure连续运行的WebJob,而不是那些,那些消息正在转移到Poison Queues?
WebJobs SDK最多可处理5次函数来处理队列消息。该消息将被移动到毒性队列,更多详细信息可以参考How to handle poison messages下的描述。
我认为您需要检查输入的编码格式。您可以查看天蓝色存储下的日志,更多详细信息,您可以关注here。此外,您还可以在try-catch-throw
函数中使用ProcessMessageQueue
来缩小此问题。