0

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

我已将GOOGLE PROTOBUF字节作为 CloudMessage 推送到 Azure 队列存储中。但是,Azure 队列存储没有 ping 并将该 CloudMessage 传递给我的 Azure 连续运行的 WebJob,而不是那些消息正在移动到毒物队列?

以下代码是我用于汇集队列消息的 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;
        }
    }
}

函数.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 功能,并且所有队列消息都已移至毒物队列。

我在这里想念什么?

感谢您对此的想法。

提前致谢!

4

1 回答 1

1

根据您的代码,我检查了这个问题。我传递了payloadas ,然后我可以在我的函数下System.Text.UTF8Encoding.UTF8.GetBytes("hello world " + DateTime.Now)检索字符串参数。messageProcessMessageQueue

收到队列消息时如何触发函数状态如下:

此外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,而不是那些消息正在移动到毒物队列?

WebJobs SDK 将处理一个函数最多 5 次来处理您的队列消息。该消息将被移动到毒队列中,更多细节您可以参考如何处理毒消息下的描述。

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

于 2017-11-13T09:37:42.347 回答