6

我试图找出应该从 Azure 存储队列触发的 Azure WebJobs QueueTrigger 方法我做错了什么。

我已经阅读了一些文档(如博客文章/msdn 文章)。但我仍然不清楚。

主要问题/被误解的方面:

Azure 存储控制台应用 App.config 或 Windows Azure 配置(门户)的连接字符串的名称应该是什么。到目前为止,我在两个地方都设置了以下名称。

  • Azure作业存储
  • AzureWebJobsStorage
  • AzureJobsRuntime
  • AzureJobsDashboard
  • AzureJobsData

这是我的 WebJobs 控制台应用程序代码。

static void Main()
{
    JobHost host = new JobHost();
    host.RunAndBlock();
}

public static void CreateLeague([QueueTrigger("temp")] string msg)
{
    var task = JsonConvert.DeserializeObject<QueueTask>(msg);

    if (task.TaskType == QueueTask.TaskTypes.Pdf)
      RenderPdf(task.Id);
}

这个控制台应用程序在我的 Azure 网站上持续运行。

我可以访问它的“调试”页面,我可以在其中切换输出,我看到它已启动/运行。

我添加队列的代码(来自我的 ASP.NET MVC 应用程序):

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("temp");
queue.CreateIfNotExists();
Common.QueueTask task = new Common.QueueTask();
task.TaskType = Common.QueueTask.TaskTypes.Pdf;
task.Id = p.Id;
CloudQueueMessage msg = new CloudQueueMessage(JsonConvert.SerializeObject(task)      );
queue.AddMessage(msg);

执行此代码,并将队列添加到我的存储帐户。但他们没有得到“出队”或从 WebJobs 中读取。

4

3 回答 3

18

嗯,WebJobs 类必须是公开的。

using Microsoft.Azure.WebJobs;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Newtonsoft.Json;
using Proceed.Common;
using System;
using System.Configuration;
using System.IO;

public class WebJobsTask {
  public static void Main()
  {
      JobHost host = new JobHost();
      host.RunAndBlock();
  }

  public static void CreateLeague([QueueTrigger("temp")] string msg)
  {
    var task = JsonConvert.DeserializeObject<QueueTask>(msg);

    if (task.TaskType == QueueTask.TaskTypes.Pdf)
      RenderPdf(task.Id);
  }
}

还找到了一种快速浏览我的队列的方法:https ://azurestorageexplorer.codeplex.com/ 。

于 2014-10-16T17:55:12.727 回答
15

就我而言,我假设 QueueTrigger 指的是服务总线队列而不是Azure 队列,我实际上需要使用ServiceBusTrigger.

于 2015-06-05T22:22:10.217 回答
0
  1. 您可以使用 VS 中的服务器资源管理器来探索存储队列的内容。
  2. 如果没有工作要做,WebJobs SDK 的队列触发器将呈指数级回退。在将消息放入队列的那一刻和它被拾取的那一刻之间可能存在延迟。您可以通过该JobHostConfiguration.Queues.MaxPollingInterval属性配置最大回退。
  3. 对于最新的 SDK,您需要两个存储连接字符串AzureWebJobsStorageAzureWebJobsDashboard

这是获取更多资源的好地方:https ://docs.microsoft.com/en-us/azure/app-service-web/websites-webjobs-resources

于 2014-10-16T19:32:13.007 回答