2014-10-16 14 views
5

Ich versuche herauszufinden, was ich falsch in Bezug auf eine Azure WebJobs QueueTrigger-Methode mache, die von einer Azure-Speicherwarteschlange ausgelöst werden soll.Azure WebJobs QueueTrigger löst nicht aus

Ich habe ein paar Dokumente gelesen (wie in Blogposts/msdn Artikel). Aber ich bin immer noch nicht klar.

Haupt Frage/mißverstanden Aspekt: ​​

Was für Azure Storage Console App App.config oder Windows Azure-Konfiguration (Portal) der Name der Verbindungszeichenfolge sein sollte. Bisher habe ich an beiden Stellen den folgenden Namen gesetzt.

  • AzureJobsStorage
  • AzureWebJobsStorage
  • AzureJobsRuntime
  • AzureJobsDashboard
  • AzureJobsData

Hier ist meine WebJobs Konsole App-Code.

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); 
} 

Diese Konsolen App läuft kontinuierlich auf meiner Azure-Website.

Ich kann auf seine "Debug" -Seite, wo ich die Ausgabe wechseln kann und ich sehe, es ist gestartet/läuft.

Mein Code Warteschlange hinzufügen (aus meinem ASP.NET MVC-app):

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); 

Dieser Code ausgeführt wird, und Warteschlange zu meinem Speicher-Konto hinzugefügt. Aber sie wurden nicht von den WebJobs "enthoben" oder gelesen.

Antwort

19

Hmm, die WebJobs-Klasse musste öffentlich sein.

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); 
    } 
} 

Auch eine schnelle Möglichkeit gefunden, meine Warteschlangen zu erkunden: https://azurestorageexplorer.codeplex.com/.

+3

So froh, dass Sie diese Antwort gepostet haben. Ich kann nicht glauben, dass die Code-Vorlagen im Studio die Klasse auf privat setzen. – JasonCoder

0
  1. Sie können den Server-Explorer in VS verwenden, um den Inhalt der Speicherwarteschlangen zu untersuchen.
  2. Die Warteschlangenauslöser für das WebJobs-SDK werden sich exponentiell zurückziehen, wenn keine Arbeit erforderlich ist. Es kann eine Verzögerung zwischen dem Moment, in dem eine Nachricht in eine Warteschlange eingereiht wird, und dem Zeitpunkt, zu dem sie abgeholt wird, geben. Sie können die maximale Zurücksetzung über die Eigenschaft JobHostConfiguration.Queues.MaxPollingInterval konfigurieren.
  3. Für neuesten SDK benötigen Sie zwei Speicherverbindungszeichenfolgen AzureWebJobsStorage und AzureWebJobsDashboard

Dies ist ein großartiger Ort für mehr Informationen: https://docs.microsoft.com/en-us/azure/app-service-web/websites-webjobs-resources

13

In meinem Fall hatte ich angenommen, dass QueueTrigger zu Dienst bezog Bus-Warteschlangen anstelle von Azure-Warteschlangen, und ich musste tatsächlich ServiceBusTrigger verwenden.

+3

Ich hatte das gleiche Problem. Auch gesehen der ServiceBusTrigger an Orten erwähnt, aber das Attribut nie auflösen, bis ich Microsoft.Azure.WebJobs.ServiceBus Nugget-Paket hinzugefügt! Sprechen Sie darüber, dass es in der Dokumentation nicht klar ist. –

+0

In der Tat, etwas verwirrend. – ohavryl