自動メールを送信する必要があります。彼らは確実にディスパッチする必要があるので、データベースに書き込んでいます。同時に、Application_Start
で開始されたSystem.Threading.Timer
は、30秒ごとにメソッドを呼び出してデータベースから読み出し、送信されたエントリを削除して送信します。これは長時間実行されるタスクとしては発生しません。 db-queueをクリアするプロセスが非同期メソッドを使用するように注意が払われているので、送信/キューイングのフェーズはブロックされず、プロセス全体がshort-livedメソッドで実行されます(ThreadPool
)。アプリリサイクルのコストも最小限に抑えられます(おそらく、1つのメールを再送することになります...問題ではありません)。メールキューをアプリケーションプールで実行するのは間違っていますか?
従来の知恵は、Webアプリケーションでこれを実行するとそれほど良くないと言い、サービスにこれをスピンアウトする必要があります。
書き込みサービスはPITAです。私はむしろそれを避けたい。だから私はなぜ私は効率的な非同期メールキューを私のアプリケーションプールで実行しないでください?誰でも私を啓発することはできますか?
データベースに、特定のメールが受信され、送信中であることを何らかの形で示していますか?そうでない場合は、複数のWebサーバーで実行する予定ですか?上記の回答が「いいえ」と「はい」の場合、両方のサーバーが同じバッチの電子メールを同時に送信しないようにする必要があります。 –
@ChrisShain、私はこれを認識しており、サイトがサーバーを超えて進化した場合にアーキテクチャを変更します。 – spender
タイマーを守って、私は私のプログラムのために同様のタイマーの仕事をしていて、最後の4年間はうまくいきました。全く問題はなく、私は2日間のスレッドとタイマーで2日間の作業をします。 http://msdn.microsoft.com/en-us/magazine/cc164015.aspx – Aristos