Azure WebJob队列不会触发WebJobs

时间:2017-11-10 10:53:15

标签: c# azure protocol-buffers azure-queues azure-webjobs-continuous

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

我在这里缺少什么?

欣赏你对此的看法。

提前致谢!

1 个答案:

答案 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来缩小此问题。