繁体   English   中英

Azure WebJob队列未触发WebJob

[英]Azure WebJob Queues are not triggering WebJobs

如果将二进制格式的消息传递给队列,Azure WebJob队列不会触发WebJobs?

我已经将GOOGLE PROTOBUF字节作为CloudMessage推送到 Azure队列存储中。 但是,Azure队列存储是否无法ping通并将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云中发布/运行的Web作业

我对下面的方法签名有疑问。

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

由于消息已成功添加到队列存储中,但是队列未触发Azure功能,并且所有队列消息都移至Poison Queue,因此上述方法签名中的message参数应该使用哪种数据类型。

我在这里想念什么?

感谢您对此的想法。

提前致谢!

根据您的代码,我检查了此问题。 我将payload作为System.Text.UTF8Encoding.UTF8.GetBytes("hello world " + DateTime.Now)传递,然后可以在ProcessMessageQueue函数下检索字符串参数message

作为如何在收到队列消息时触发功能的状态如下:

除了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并将其传递到我的持续运行WebJob的Azure,而是这些消息移到了Poison Queue?

WebJobs SDK最多可以处理5次功能来处理您的队列消息。 该消息将被移至中毒队列,有关更多详细信息,请参阅如何处理中毒消息下的描述。

我假设您需要检查输入的编码格式。 您也可以在天蓝色存储下查看日志,更多详细信息,请点击此处 此外,您还可以在ProcessMessageQueue函数中使用try-catch-throw来缩小此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM