Hangfireを.NET Coreプロジェクト(MVCやWeb APIなど)に統合するには、まずNuGetパッケージマネージャーを使用してHangfireをインストールします。プロジェクトの要件に合わせて適切なバージョンを選択してください。
SQL Serverを使用した設定
データベースバックエンドとしてSQL Serverを利用する場合、Startup.csのConfigureServicesメソッドで以下のようにサービスを構成します。
public void ConfigureServices(IServiceCollection services)
{
// 構成ファイルから接続文字列を取得
var dbConnection = Configuration.GetSection("ConnectionStrings")["DefaultHangfireConnection"];
// Hangfireの追加とSQL Serverストレージの設定
services.AddHangfire(globalConfiguration =>
{
globalConfiguration.UseSqlServerStorage(dbConnection);
});
// その他のDIコンテナ設定...
}
MySQLを使用した設定
MySQLをデータストアとして使用するには、追加でHangfire.MySqlパッケージへの参照が必要です。構成オプションを詳細に指定する実装例は以下の通りです。
var mySqlConn = Configuration["DatabaseSettings:HangfireMySql"];
services.AddHangfire(config => config.UseStorage(
new MySqlStorage(
mySqlConn,
new MySqlStorageOptions
{
// トランザクション分離レベル
TransactionIsolationLevel = IsolationLevel.ReadCommitted,
// キューのポーリング間隔
QueuePollInterval = TimeSpan.FromSeconds(15),
// スキーマの自動作成
PrepareSchemaIfNecessary = true,
// ダッシュボードのジョブ表示上限
DashboardJobListLimit = 50000,
// テーブルプレフィックス(必要に応じて)
TablesPrefix = ""
}
)));
ミドルウェアとダッシュボードの有効化
Configureメソッドにて、Hangfireサーバーの起動とダッシュボードUIのエンドポイント有効化を行います。これにより、ブラウザ上でジョブの状態を監視・管理できるようになります。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Hangfireサーバーの起動
app.UseHangfireServer();
// ダッシュボードUIの有効化
app.UseHangfireDashboard("/hangfire");
// その他のミドルウェア(app.UseRoutingなど)...
}
設定後、https://localhost:5001/hangfire(または設定したポート)にアクセスすると、ジョブの実行状況や履歴を確認できる管理画面が表示されます。デフォルトではローカルアクセスのみ許可されていますが、本番環境では認証フィルタやIP制限を適切に設定してください。
定期ジョブ(Recurring Job)の登録
アプリケーション起動時に定期的に実行するタスクを登録するには、RecurringJob.AddOrUpdateメソッドを使用します。以下は、特定のメソッドを一定間隔で呼び出す例です。
// アプリ起動時の初期化処理などで実行
// "ProductSync"という識別子で、SyncProductDataメソッドを5分ごとに実行
RecurringJob.AddOrUpdate("ProductSync", () => SyncProductData(), Cron.MinuteInterval(5));
なお、PrepareSchemaIfNecessary = trueを設定している場合、初回実行時にデータベースへ必要なテーブルが自動作成されます。
Redisを使用した設定
スケーラビリティやパフォーマンスの観点からRedisを採用する場合、StackExchange.Redisを使用して接続を構成します。以下はStartup.csでの設定例です。
// 接続文字列の取得
var redisConfig = Configuration.GetSection("Redis");
var redisConnStr = redisConfig["ConnectionString"];
var keyPrefix = redisConfig["Prefix"];
// Redis接続の確立
var multiplexer = ConnectionMultiplexer.Connect(redisConnStr);
// ストレージオプションの定義
var storageOptions = new RedisStorageOptions
{
Prefix = keyPrefix,
Db = 0
};
// 設定ファイルからDB番号を読み込んで上書き
if (int.TryParse(redisConfig["DatabaseId"], out int dbId))
{
if (dbId >= 0 && dbId <= 15)
{
storageOptions.Db = dbId;
}
}
// HangfireにRedisストレージを登録
services.AddHangfire(config => config.UseRedisStorage(multiplexer, storageOptions));
設定ファイル (appsettings.json)
上記のコードで参照されている設定値は、appsettings.jsonに以下のように定義します。
{
"ConnectionStrings": {
"DefaultHangfireConnection": "Server=.\\SQLEXPRESS;Database=HangfireDb;Trusted_Connection=True;"
},
"Redis": {
"ConnectionString": "127.0.0.1:6379,password=,ssl=false",
"Prefix": "myapp:hangfire:",
"DatabaseId": "1"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
}
}