2014-10-16 222 views
5

我试图找到我正在做的错误应该从Azure存储队列触发的Azure WebJobs QueueTrigger方法。Azure WebJobs队列触发器不触发

我读过几篇文档(如在博客文章/ msdn文章中)。但我还不清楚。

主要问题/误解方面:

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

  • AzureJobsStorage
  • 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读取。

回答

19

嗯,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/

+3

很高兴你发布了这个答案。无法相信Studio中的代码模板会将该类默认为私有类。 – JasonCoder 2016-03-24 15:36:42

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

13

以我为例,我曾以为,QueueTrigger指的是服务总线队列而不是Azure队列,我实际上需要使用ServiceBusTrigger

+3

我有同样的问题。也看到ServiceBusTrigger提到的地方,但属性永远不会解决,直到我添加Microsoft.Azure.WebJobs.ServiceBus nuget包!谈论文件中的不清楚。 – 2015-06-20 01:06:26

+0

确实有点混乱。 – ohavryl 2015-11-02 19:25:57

相关问题