2015-03-07 2 views
5

Ich habe zwei verschiedene Szenarien, um zwei verschiedene Warteschlangentypen mit dem Azure-Warteschlangenspeicher zu verarbeiten.Konfigurieren von QueueTrigger pro Warteschlange mit Azure-Warteschlangenspeicher

Ich möchte eine Warteschlange nacheinander ausführen, und die andere gleichzeitig ausführen.

Ich habe die Dokumentation angeschaut und kann die Konfiguration auf den Host anwenden, was sich auf den gesamten Bereich der Warteschlangen auswirkt.

static void Main(string[] args) 
    { 
     JobHostConfiguration config = new JobHostConfiguration(); 
     config.Queues.BatchSize = 8; 
     config.Queues.MaxDequeueCount = 4; 
     config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15); 
     JobHost host = new JobHost(config); 
     host.RunAndBlock(); 
    } 

also kann ich diese Szenarien konfigurieren, indem Sie ein einziges azurblaues Speicherkonto verwenden?

Antwort

1

Von Ihrer Frage, ich verstehe, dass Sie 2 Warteschlangen haben und jede Warteschlange verwendet werden muss, um verschiedene Aufgaben/Jobs zu verarbeiten.

Sie diese Ansätze verfolgen können

1) Bereitstellen von 2 Web Jobs, warten jeweils auf verschiedenen Warteschlangen und auslösen Job entspricht, wenn eine Nachricht an entsprechenden Warteschlange erscheint. Der oben erwähnte Konfigurationscode legt die Basis für einen Job fest. Und AFAIK, ein Job kann in einer Warteschlange warten. Sie können wie folgt neben Main() Methode eine Methode

public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage) 
{ 
    //do something 
} 

2), wenn Sie mehrere Szenarien basierend auf Nachrichten von einer Warteschlange auslösen möchten, können Sie sich ein, wenn auch Block auf der ProcessQueueMessage Methode oder wenn Sie wollen Machen Sie es überschaubarer, verwenden Sie das Strategie-Muster, um die richtige Methode auszuführen ProcessQueueMessage

Wenn Sie oben # 1 folgen, werden Sie verschiedene Web-Jobs für jede Aufgabe/Aufgabe/Szenario bereitstellen. Wenn Sie der obigen Nummer 2 folgen, werden Sie einen Web-Job bereitstellen, und was jede Nachricht macht, wird während der Verarbeitung der Nachricht entschieden.

Dokumentation im Zusammenhang mit Warten auf Warteschlange here.

[Update]

Wie wir wissen, ein Web-Job nur eine Warteschlange wartet auf kann, auf der Warteschlange ist nicht der richtige Ansatz in diesem Fall. Starten Sie den Web-Job regelmäßig (sagen Sie einmal in 5 Minuten). Die Logik, Nachrichten aus mehreren Warteschlangen zu entfernen und sie zu verarbeiten, ist Teil eines Web-Jobs. Die Verarbeitung jeder Warteschlange kann eine Methode sein, die vom Web-Job (nacheinander oder gleichzeitig mit Task) aufgerufen wird. Sie können die Nachrichtenanzahl für jede Warteschlange an die CloudQueue.GetMessages übergeben. Es wird sehr ähnlich sein wie der Windows-Dienst. Nur dass der auslösende Teil vom Web-Job übernommen wird und als Web-Job statt Windows-Dienst ausgeführt wird. Hier ist ein grober Pseudo-Code:

main() 
{ 
    // initialize webjob 
} 
public static MyWebJobMethod(...) 
{ 
    Task a =() => {//process queue 1}; 
    Task b =() => {//process queue 2} 
    Task.WaitAll(a,b); 
} 
+0

Dank für Ihre Antwort, die ich habe in dieser Dokumentation sieht vor, die Frage zu stellen, ich habe nicht te Option mehr Web-Arbeitsplätze bereitstellen, eigentlich betreiben ich einen Windows-Dienst das macht die Webjob-Rolle vollkommen in Ordnung, das Problem ist, wie kann ich "Die maximale Anzahl von Warteschlangennachrichten, die gleichzeitig abgeholt werden", pro Warteschlange sagen, ein Trigger sollte einen zu der Zeit auslösen und andere könnte die Standardkonfiguration haben. –

+0

http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-s-dk-storage-queues-how-to/#config –

+0

habe meine Antwort aktualisiert ... – Amit

Verwandte Themen