web-dev-qa-db-ja.com

Azure Webjobを継続的に実行し、自動トリガーなしでパブリック静的関数を呼び出す方法

継続的に実行する必要があるAzure Webjobを開発しています。パブリックスタティック関数があります。この関数がキューなしで自動的にトリガーされるようにします。現在、私はwhile(true)を使用して継続的に実行しています。これを行う他の方法はありますか?

以下に私のコードを見つけてください

   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));
    }
}

ありがとう

22
Mukil Deepthi

これらの手順は、あなたが望むものにあなたを連れて行きます:

  1. メソッドを非同期に変更します
  2. 睡眠を待つ
  3. host.Call()の代わりにHost.CallAsync()を使用します

以下の手順を反映するようにコードを変換しました。

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

Microsoft.Azure.WebJobs.Extensions.Timersを使用します。 https://github.com/Azure/azure-webjobs-sdk-extensions/blob/master/src/ExtensionsSample/Samples/TimerSamples.cs を参照してください= TimeSpanまたはCrontab命令を使用してメソッドを起動するトリガーを作成します。

NuGetからMicrosoft.Azure.WebJobs.Extensions.Timersをプロジェクトに追加します。

public static void ProcessMethod(TextWriter log)

になる

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

5分間のトリガー(TimeSpan文字列を使用)

次のように、Program.cs Mainがタイマーを使用するように構成をセットアップすることを確認する必要があります。

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