web-dev-qa-db-fra.com

Comment faire fonctionner Azure Webjob en continu et appeler la fonction statique publique sans déclencheur automatique

Je développe un webjob Azure qui devrait fonctionner en continu. J'ai une fonction statique publique. Je veux que cette fonction soit déclenchée automatiquement sans file d'attente. En ce moment, j'utilise while (true) pour fonctionner en continu. Y a-t-un autre moyen de faire ça?

Veuillez trouver ci-dessous mon code

   static void Main()
    {
        var Host = new JobHost();
        Host.Call(typeof(Functions).GetMethod("ProcessMethod"));
        // The following code ensures that the WebJob will be running continuously
        Host.RunAndBlock();
    }

[NoAutomaticTriggerAttribute]
public static void ProcessMethod(TextWriter log)
{
    while (true)
    {
        try
        {
            log.WriteLine("There are {0} pending requests", pendings.Count);
        }
        catch (Exception ex)
        {
            log.WriteLine("Error occurred in processing pending altapay requests. Error : {0}", ex.Message);
        }
        Thread.Sleep(TimeSpan.FromMinutes(3));
    }
}

Merci

22
Mukil Deepthi

Ces étapes vous amèneront à ce que vous voulez:

  1. Changez votre méthode en async
  2. attend le sommeil
  3. utiliser Host.CallAsync () au lieu de Host.Call ()

J'ai converti votre code pour refléter les étapes ci-dessous.

static void Main()
{
    var Host = new JobHost();
    Host.CallAsync(typeof(Functions).GetMethod("ProcessMethod"));
    // The following code ensures that the WebJob will be running continuously
    Host.RunAndBlock();
}

[NoAutomaticTriggerAttribute]
public static async Task ProcessMethod(TextWriter log)
{
    while (true)
    {
        try
        {
            log.WriteLine("There are {0} pending requests", pendings.Count);
        }
        catch (Exception ex)
        {
            log.WriteLine("Error occurred in processing pending altapay requests. Error : {0}", ex.Message);
        }
        await Task.Delay(TimeSpan.FromMinutes(3));
    }
}
25
none

Utilisez Microsoft.Azure.WebJobs.Extensions.Timers, voir https://github.com/Azure/azure-webjobs-sdk-extensions/blob/master/src/ExtensionsSample/Samples/TimerSamples.cs = pour créer un déclencheur qui utilise une instruction TimeSpan ou Crontab pour déclencher la méthode.

Ajoutez Microsoft.Azure.WebJobs.Extensions.Timers de NuGet à votre projet.

public static void ProcessMethod(TextWriter log)

devient

public static void ProcessMethod([TimerTrigger("00:05:00",RunOnStartup = true)] TimerInfo timerInfo, TextWriter log) 

pour les déclencheurs de cinq minutes (en utilisant la chaîne TimeSpan)

Vous devrez vous assurer que votre Program.cs Main configure la configuration pour utiliser les minuteries comme suit:

static void Main()
    {
        JobHostConfiguration config = new JobHostConfiguration();
        config.UseTimers();

        var Host = new JobHost(config);

        // The following code ensures that the WebJob will be running continuously
        Host.RunAndBlock();
    }
16
Rocklands.Cave