C#でHangfireを操作する方法

Webアプリケーションでジョブをスケジュールすることは困難であり、タスクの多くのフレームワークから選択できます。人気のあるオープンソースライブラリであるHangfireは、.Netでバックグラウンドジョブをスケジュールするために使用できるフレームワークの1つです。

なぜHangfireを使用する必要があるのですか?

今日利用可能な多くのジョブスケジューリングフレームワークがあります。では、なぜ、Quartz.Netの代わりにHangfireを使用する必要があるのでしょうか。Quartz.Netは、長い間使用されてきたもう1つの人気のあるフレームワークです。Quartz.Netの主な欠点の1つは、Windowsサービスが必要なことです。それどころか、アプリケーションでHangfireを使用するためにWindowsサービスは必要ありません。Windowsサービスなしで実行できるため、HangfireはQuartz.Netよりも優れた選択肢です。Hangfireは、ASP.Netの要求処理パイプラインを利用して、ジョブを処理および実行します。

HangfireはWebアプリケーションに限定されないことに注意してください。コンソールアプリケーションでも使用できます。Hangfireのドキュメントは非常に詳細で構造化されており、最高の機能は組み込みのダッシュボードです。Hangfireダッシュボードには、ジョブ、キュー、ジョブのステータスなどに関する詳細情報が表示されます。

入門

Hangfireを利用するVisualStudioで新しいプロジェクトを作成するには、次の手順に従います。

  1. Visual Studio2015を開きます
  2. [ファイル]> [新規]> [プロジェクト]をクリックします
  3. 表示されたプロジェクトテンプレートのリストから[VisualC#]> [Web]を選択します
  4. WebプロジェクトテンプレートのリストからASP.NetWebアプリケーションを選択します
  5. プロジェクトを名前で保存します

次のステップは、アプリケーションにHangfireをインストールして構成することです。プロセスは非常に簡単です。VisualStudioのNuGetパッケージマネージャーを介してHangfireをインストールできます。または、パッケージマネージャーコンソールを使用してHangfireライブラリをインストールすることもできます。Hangfireのデフォルトのインストールでは、SQLServerを使用してスケジュール情報を保存します。さらに、ストレージに代わりにRedisを使用する場合は、Hangfire.Redisをインストールできます。

Hangfireはジョブを永続ストレージに保存することに注意してください。Hangfireの使用を開始する前にストレージを構成する必要があります。これを行うには、データベースを作成し、構成ファイルの接続文字列にデータベース資格情報を指定します。データベースにテーブルを作成する必要はありません。Hangfireはそれを自動的に行います。それがいつどのように行われるかは後で見ていきます。

データベースが作成され、アプリケーションの構成ファイルで接続文字列情報が指定されたので、次のステップは、Startup.csファイルを変更し、必要な接続文字列情報を提供することです。次のコードリストは、構成の詳細が指定された後のStartup.csファイルの外観を示しています。

using Hangfire;

using Microsoft.オーウィン;

using Owin;

using System;

[assembly: OwinStartupAttribute(typeof(HangFire.Startup))]

namespace HangFire

{

    public partial class Startup

    {

        public void Configuration(IAppBuilder app)

        {

            ConfigureAuth(app);

            GlobalConfiguration.Configuration

                .UseSqlServerStorage("DefaultConnection");

            BackgroundJob.Enqueue(() => Console.WriteLine("Getting Started with HangFire!"));

            app.UseHangfireDashboard();

            app.UseHangfireServer();

        }

    }

}

これで準備は完了です。アプリケーションを実行し、URLに「/ hangfire」という接尾辞を付けると、Hangfireダッシュボードが表示されます。これを初めて実行すると、データベースに新しいテーブルが作成されます。作成されるテーブルには、AggregatedCounter、Counter、Hash、Job、JobParameter、JobQueue、List、Schema、Server、Set、およびStateが含まれます。Hangfireでファイアアンドフォーゲットの背景を作成するのは非常に簡単です。クラスのEnqueue()メソッドを使用して、バックグラウンドジョブを作成できますBackgroundJob。次に例を示します。

BackgroundJob.Enqueue(() => Console.WriteLine("This is a fire-and-forget job that would run in the background."));

遅延バックグラウンドジョブは、(遅延間隔の間)待機してから、通常のファイアアンドフォーゲットバックグラウンドジョブとほぼ同じ方法で実行されるジョブです。次のコードスニペットSchedule()は、BackgroundJobクラスのメソッドを使用して遅延バックグラウンドジョブを作成する方法を示しています。

BackgroundJob.Schedule(() => Console.WriteLine("This background job would execute after a delay."), TimeSpan.FromMilliseconds(1000));

特定の時間間隔の後に実行されるジョブを実行する場合は、Hangfireで定期的なジョブを作成する必要があります。定期的なジョブを作成するには、RecurringJobクラスを活用する必要があります。Hangfireでジョブをスケジュールするときに、「cron」式を指定することもできることに注意してください。次のコードスニペットは、Hangfireライブラリを使用して定期的なジョブを作成する方法を示しています。

RecurringJob.AddOrUpdate(() => Console.WriteLine("This job will execute once in every minute"), Cron.Minutely);

詳細については、HangfireHighlighterチュートリアルを確認してください。