web-dev-qa-db-fra.com

Comment définir le nom de la file d'attente Azure WebJob au moment de l'exécution?

Je développe un exécutable Azure WebJobs que je souhaiterais utiliser avec plusieurs sites Web Azure. Chaque site Web aurait besoin de sa propre file d'attente Azure Storage.

Le problème que je vois est que ProcessQueueMessage nécessite que le nom de la file d'attente soit défini de manière statique en tant qu'attribut du premier paramètre inputText. Je préférerais que le nom de la file d'attente soit une propriété de configuration de l'instance de site Web Azure en cours d'exécution et que l'exécutable du travail le lise au moment de l'exécution au démarrage.

Y a-t-il un moyen de faire ça?

39
eklein23

Cela peut maintenant être fait. Créez simplement une INameResolver pour vous permettre de résoudre toute chaîne entourée de signes% (pour cent). Par exemple, s'il s'agit de votre fonction avec un nom de file d'attente spécifié:

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

Notez qu’il existe des signes de pourcentage (pour cent) autour de la chaîne logqueue. Cela signifie que le système de travail essaiera de résoudre le nom en utilisant une variable INameResolver que vous pourrez créer puis enregistrer avec votre travail.

Voici un exemple de résolveur qui prend simplement la chaîne spécifiée dans les signes de pourcentage et la recherche dans vos AppSettings dans le fichier de configuration:

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

Et puis dans votre fichier Program.cs, il vous suffit de câbler ceci:

var Host = new JobHost(new JobHostConfiguration
{
  NameResolver = new QueueNameResolver()
});
Host.RunAndBlock();
93
dprothero

C'est probablement une vieille question, mais au cas où quelqu'un d'autre tomberait sur ce post. Ceci est maintenant supporté en passant un objet JobHostConfiguration dans le constructeur JobHost. 

http://Azure.Microsoft.com/en-gb/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/#config

2
Gumzle

Une légère amélioration de la mise en œuvre du résolveur de noms afin d’éviter à tout moment la récupération de la configuration. Utilise dictionnaire pour stocker les valeurs de configuration une fois récupérées.

using Microsoft.Azure.WebJobs;
using System.Collections.Generic;
using System.Configuration;

public class QueueNameResolver : INameResolver
{
    private static Dictionary<string, string> keys = new Dictionary<string, string>();
    public string Resolve(string name)
    {
        if (!keys.ContainsKey(name))
        {
            keys.Add(name, ConfigurationManager.AppSettings[name].ToString());
        }
        return keys[name];
    }
}
0
NitinSingh

Malheureusement, ce n'est pas possible. Vous pouvez utiliser l'interface IBinder pour établir une liaison dynamique avec une file d'attente, mais vous ne disposez pas du mécanisme de déclenchement correspondant. 

Fondamentalement, le nom de la file d’entrée doit être codé en dur si vous voulez des déclencheurs. Pour la sortie, vous pouvez utiliser l'interface mentionnée précédemment.

Voici un exemple pour IBinder. L'exemple lie un blob dynamiquement, mais vous pouvez faire quelque chose de très similaire pour les files d'attente.

0
Victor Hurdugaci