私は、シミュレーション実稼働環境のテストダブルとして機能することを目的とした WCF サービスを含む ASP.NET アプリケーションに取り組んでいます。Web サービス経由で注文を受け取り、数時間後または数日後に (他のシステムで Web サービスを呼び出して) 通知を送信できる、非常に複雑なバックエンドの代わりになります。
このテスト ダブル アプリケーションの最初のリリースの要件の 1 つは、ステートレスであること、つまりデータベースがないことでした。
プロジェクトに参加していない元の開発者によって配置された設計は次のとおりです。
- Webサービスで注文を受けます。
- バックグラウンド スレッドを生成する
- 返信定型文をクライアントに返す
- その後、バックグラウンド スレッドは 5 ~ 30 秒間スリープし、通知を送信し、再びスリープし、通知を送信します。これをおそらく 3 ~ 4 回繰り返し、最後に何もすることがなくなったときに終了します。
スレッドが 5 秒から 30 秒スリープするのは、本番システムの何時間も何日もかかる遅延をシミュレートするためのものです。各バックグラウンド スレッドの存続時間は、約 3 分程度です。
現在、設計はその目的のためにうまく機能しているようです。これまでのところ、このアプローチで発生した唯一の問題は、アプリケーションを再起動させる何かが発生した場合 (web.config の変更、新しい DLL の展開、IIS の再起動など)、バックグラウンド スレッドが強制終了されたように見え、保留中の通知がバックグラウンド スレッドは発生しません。
5 秒から 30 秒の遅延は短すぎるため、通知の間隔を 5 分間遅らせるのがより適切であるとお客様が判断しました。これは、バックグラウンド スレッドの有効期間が 20 分を超える可能性があることを意味します。
私の直感では、遅延を 5 分にすることは、この設計ではおそらく良い考えではありません。これについて人々がどのような考えを持っているかを見ることに興味があります。
遅延が増加した場合、この設計の信頼性はどの程度になるでしょうか? これについてコメントできる ASP.NET でバックグラウンド スレッドを長時間実行した経験のある人はいますか?