はじめに
ASP.NET上で「WebBackgrounder」を使って、バックグラウンドタスクを実装しました。
現在、ASP.NETでWebシステムを構築中で、利用者の登録時にバックグラウンド処理が必要になったので、何かないか探していたところ、「WebBackgrounder」というパッケージがあったので、使ってみました。
この「WebBackgrounder」というパッケージは、MicrosoftのWeb開発のベストプラクティス-ASP.NET では行わないことと、その代わりに行うことの記事で紹介されていたので、使えるかなあと
↓
https://docs.microsoft.com/ja-jp/aspnet/aspnet/overview/web-development-best-practices/what-not-to-do-in-aspnet-and-what-to-do-instead
やりたいことは、以下の利用者登録処理で、本登録の有効時間(72時間)を設定し、バックグラウンドタスクで、有効時間が過ぎた仮登録の情報を削除する処理です。
利用者がWebシステムを使うため、利用者登録を行い、仮登録を行う。
↓
利用者に本登録用のメールを送る
↓
利用者がメールからのURLにアクセスして本登録を行う。
WebBackgrounderの入手
WebBackgrounderをnugetから入手。バージョン0.2.0が最新ですが、2012年から更新されていません。枯れた技術です。 ↓ https://www.nuget.org/packages/WebBackgrounder参考ソース
まず初めに、Webアプリ開始と終了時に、WebBackgrounderの開始と終了処理を記述します。public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(WebBackgrounderSetup.Start);
}
protected void Application_End(object sender, EventArgs e)
{
GlobalConfiguration.Configure(WebBackgrounderSetup.Shutdown);
}
}
次に、WebBackgrounderSetupでは、任意のジョブクラスを登録します。ジョブクラスでは、
任意の周期でタスクが実行できます。今回は1分周期でジョブが実行されます。
今回はジョブが1つだけですが、任意の周期でジョブが登録できます。
public static class WebBackgrounderSetup
{
private static readonly JobManager jobManager = CreateJobWorkersManager();
public static void Start(HttpConfiguration config)
{
jobManager.Start();
}
public static void Shutdown(HttpConfiguration config)
{
jobManager.Dispose();
}
private static JobManager CreateJobWorkersManager()
{
var jobs = new IJob[]
{
new UserStatusUpdateJob("UserStatusUpdateJob", TimeSpan.FromMinutes(1)),
};
var coordinator = new SingleServerJobCoordinator();
var manager = new JobManager(jobs, coordinator);
return manager;
}
}
最後に、ジョブクラスでは、WebBackgrounder.Jobクラスを継承したクラスを実装します。
public class UserStatusUpdateJob : Job
{
public UserStatusUpdateJob(string name, TimeSpan interval) : base(name, interval)
{
}
public override System.Threading.Tasks.Task Execute()
{
return new Task(() =>
{
UpdateStats();
});
}
public void UpdateStats()
{
// 有効時間が過ぎた仮登録の情報を削除処理
}
}