おはよう君需要なし

求不得苦な日々

非同期にタスクを実行させるためのWebインタフェースを作る【HangFire】

はじめに

Webでポチポチ~ってして、いい感じにサーバが非同期に重たい処理を勝手にキューして実行してくれたら便利だなぁと思うことってあると思います。

例えば人がパラメータを設定して次々に処理を行っていく場合など。CMの位置を指定してCMカットしてエンコードする、みたいな完全には自動化できない処理では重宝するんじゃないでしょうか。本来は完全に自動化できるのがベストなんだとは思いますが。

HangFire

で、ここで使えるのがHangFireというライブラリで、このライブラリは、データベースサーバにキューされたタスクを自動的に(実行用)サーバで処理する仕組みを提供してくれます。

hangfire.io

サンプル的には以下のサイトがとても参考になりました。

qiita.com

改善したい点

タスクを実際に登録する場合や、実行しているタスクを表示する場合は標準で用意されているインタフェースでは他のタスクや停止・再キューなどクリティカルな部分も見せてしまうことになるので、サービスとして提供する場合にはラッパーを用意する必要があるかと思います。

現在のHangFireではデータベースの仕様を明に提示しているわけではないので、ソースを読んでいくしかありません。現在はちょっとスケジュールがきついのでそこら辺を改良してコミットすることはできないんですが、ゆくゆくはAPI化などしていきたいところではあります。せっかくのオープンソースなので。

終わりに

今回はC#で処理を書きたかったこともあり、ASP.netで使用できるライブラリを探していました。あんまりC#で実装する利点などは活かせていないんですが、仕組みとして使ってみたかったのもあり試してみました。

読み返すとなんの情報もない駄文になってしまいました…