2014-03-28 6 views
36

Ich entwickle eine Azure WebJobs-Programmdatei, die ich mit mehreren Azure-Websites verwenden möchte. Jede Website benötigt eine eigene Azure Storage-Warteschlange. Das Problem, das ich sehe, ist, dass die "ProcessQueueMessage" erfordert, dass der Warteschlangenname statisch als ein Attribut des ersten Parameters "inputText" definiert wird. Ich möchte lieber, dass der Name der Warteschlange eine Konfigurationseigenschaft der ausgeführten Azure-Websiteinstanz ist und dass die ausführbare Datei des Jobs zur Laufzeit beim Start gelesen wird. Gibt es eine Möglichkeit, dies zu tun?Wie wird der Name der Azure-WebJob-Warteschlange zur Laufzeit festgelegt?

Antwort

1

Leider ist das nicht möglich. Sie können die Schnittstelle IBinder verwenden, um dynamisch an eine Warteschlange zu binden, aber Sie haben keinen auslösenden Mechanismus dafür.

Grundsätzlich muss der Name der Eingabewarteschlange fest codiert sein, wenn Sie Trigger wünschen. Zur Ausgabe können Sie die zuvor erwähnte Schnittstelle verwenden.

Here is eine Probe für IBinder. Das Beispiel bindet einen Blob dynamisch, aber Sie können etwas sehr ähnliches für Warteschlangen tun.

83

Das jetzt getan werden kann. Erstellen Sie einfach eine INameResolver, um es Ihnen zu ermöglichen, eine beliebige Zeichenfolge, die in Prozentzeichen (%) umgeben ist, aufzulösen. Zum Beispiel, wenn dies Ihre Funktion mit einem Warteschlangennamen angegeben:

public static void WriteLog([QueueTrigger("%logqueue%")] string logMessage) 
{ 
    Console.WriteLine(logMessage); 
} 

Beachten Sie, wie es% (Prozent) Zeichen rund um den String logqueue. Dies bedeutet, dass das Jobsystem versucht, den Namen mithilfe eines INameResolver zu lösen, den Sie erstellen und dann bei Ihrem Job registrieren können.

Hier ist ein Beispiel für einen Resolver, der in den nur die Zeichenfolge angegebenen Prozentzeichen nehmen und es in Ihrem AppSettings in der Konfigurationsdatei nachschlagen:

public class QueueNameResolver : INameResolver 
{ 
    public string Resolve(string name) 
    { 
     return ConfigurationManager.AppSettings[name].ToString(); 
    } 
} 

Und dann in Ihrer Datei Program.cs, Sie müssen nur dies verdrahten:

var host = new JobHost(new JobHostConfiguration 
{ 
    NameResolver = new QueueNameResolver() 
}); 
host.RunAndBlock(); 
+2

@ eklein23 Könnten Sie diese Antwort als "Antwort" markieren :) Danke. – Nordes

+3

Die Standard-JobHostConfiguration in neueren Versionen des SDK enthält automatisch einen NameResolver, so dass Sie keine eigenen mehr definieren müssen. Sie können direkt% configkey% verwenden und es sollte funktionieren. – viblo

Verwandte Themen