2014-10-16 229 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