Azure WebJobs Part 2 : Activer un job à partir d’une queue

Je remarque que j’ai complètement zappé de terminer mes tutos des webJobs. La version release 1.0 du SDK vient de sortir c’est donc une bonne occasion pour rattraper mon retard, surtout que certains choses ont changé et d’autre choses se sont améliorés sur le SDK.

Dans cette deuxième partie, nous allons voir comment déclencher un WebJob à partir d’une file d’attente de stockage Azure (Azure Queue Storage). Pour cela nous aurons besoin d’utiliser le SDK Web Job Azure disponible en package Nuget

Nous restons dans le scénario initiale qui est de déclencher une purge d’une base de données.

Création de l’application Console

Dans un premier temps , le sdk nous permet de configurer dans le corps de la méthod Main un host d’exécution. Ce host sera responsable d’analyser le code de notre application pour déterminer les différentes méthodes et points d’entrée de nos Jobs.

Cela se fait avec les deux déclarations suivantes :

 
var host = new JobHost(); 
host.RunAndBlock(); 

 

Le sdk a besoin de différentes chaines de connexion pour fonctionner, il y en a au moins 3 :

  • la chaine de connexion pour le dashboard :
  • la chaine de connexion
    • pour écouter sur des blobs ou  sur des queue storage
    • pour écouter sur des souscription de service bus

Par défaut, vous devez donc ajouter dans votre fichier de configuration les appSettings suivant :

  • AzureWebJobsDashboard
  • AzureWebJobsStorage
  • AzureWebJobsServicebus

Il est ensuite possible de spécifier les connexions que l’on souhaite dans le constructeur de la class JobHost.

Ce code va analyser les classes publiques ainsi que les méthodes publiques et statiques de notre assembly  afin de mettre en place des listeners sur les Queues Storage ou encore les Blob Storage.

Dans cette exemple, nous nous intéresseront au Queue :

 
public static void ListenToQueue([QueueTrigger("sqlpurge")] Table table) 
{ 
  var connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
  var queryString = String.Format("DELETE FROM dbo.{0} where [DateTimeUtc] < convert(datetime2,'{1}') ", table.Name,DateTime.UtcNow.AddMinutes(-3000).ToString("O")); 
  using (var connection = new SqlConnection( connectionString)) 
    { 
      var command = new SqlCommand( queryString, connection); 
      connection.Open(); 
      var query = command.ExecuteNonQuery(); 
      Console.WriteLine("Job éxecuté @ {0} : nombre de ligne supprimée : {1}", DateTime.UtcNow, query); 
    } 
} 

la signature de la méthode avec l’attribut QueueTrigger(Name), nous permet d’indiquer que nous souhaitons écouter sur une Queue de Storage Azure.

Dès qu’un message sera publier dans la Queue qui a le nom “SQLPurge”, il sera traduit par le SDK en objet de type Table et nous pourrons directement l’utiliser. L’objet de type Table est le suivant.

 
 
/// Ex: { "Name" : "Logs" } 
public class Table 
{ 
  public string Name { get; set; } 
} 

On peut lancer le WebJob en débug local sur la machine (on ne peut pas par contre se brancher sur l’émulateur Azure Storage) :

image

La méthode a bien été trouvée.

Nous allons donc publier le message au format JSON dans la queue :

image

Nous voyons qu’il est bien reçu par la méthode et parsé pour avoir un objet .Net.

Il est possible de configurer le délai de polling dans la queue mais par défault, depuis la version 1.0rc du SDK ce délai est de 1min.

Cette configuration est effectué au démarrage du host avec la classe suivante :

 
new JobHostQueuesConfiguration() 
{ 
  BatchSize = 10, 
  MaxDequeueCount = 1, 
  MaxPollingInterval = TimeSpan.FromMinutes(1) 
} 
This entry was posted in Azure, Français and tagged , . Bookmark the permalink.

One Response to Azure WebJobs Part 2 : Activer un job à partir d’une queue

  1. Pingback: A la découverte des Windows Azure Web Jobs (Intro) | Jérémie – an other BizTalker

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s