私は何を達成しようとしているのかを簡単に説明します。これを行う私の最初の考えは、私の意見でうまくいくわけではないので、私はこれをどのように計画するのが最善かを判断しようとしています。CでWindowsサービスを使用してメッセージを送信するスケジュールを設定する最良の方法
最初に考えました:
私はスケジュールされた時間で送信する必要のあるメッセージのリストを持って、それぞれが中央のSQLデータベースに格納されています。
30分ごとにタイマーを設定するWindowsサービスを使用することを意図しています。それぞれの場合
ScheduleActivated = 1
:..だから
30 Mins pass > Call ScheduleMessages()
ScheduleMessagesは、次の30分で出て行く必要がある任意の未送信メッセージのためのデータベースをチェックします、それはその後としてデータベースにそれらをマークしますScheduleActivated = 1とマークすると、通常のタイマーから継承する顧客時間オブジェクトを起動します。これには、送信する必要があるメッセージのプロパティも含まれます。
メッセージが送信されるタイミングでチェックされ、メッセージが送信され、データベースに成功とマークされます。
この問題の主な問題は、すべての場所でタイマーを使用することです。一度に数百のメッセージがスケジュールされると、おそらくうまく動作しないか、完全にフォールオーバーすることになります。
は再evalutating後、私は2
私の他のアイデアは、10分ごとにティックサービス、で実行されている1つのタイマーを持っていることでした解決策を考えました。それが刻印されるたびに、その時点までの任意の時点でリストに送られるすべてのメッセージを収集し、一度に1つずつ処理するメソッドを起動します。
これはリソースの消費量がはるかに少ないようですが、10分後にタイマーが遅くなると、送信が完了していないメッセージが次のティックで捕捉され、再度送信されることが心配です。
タイマーが10分間経過するとタイマーを停止してから、ゼロにリセットしてメッセージが送信された後に再び開始することができますか?
問題の第3の解決策は、上記より優れていますか?
メッセージ自体は単純な構成です。当社には複数のタイプの「連絡先」があります。連絡先の種類には、電子メール、または内部IMがあります。インターフェイスから継承する各Contactタイプには、独自のSendMessage()メソッドが必要です。メッセージは各IContactに送信されます。実際の連絡先オブジェクトは、実際のスケジューリングサービスではなくメッセージを送信します。スケジューリングサービスは、メッセージが成功したと言う応答を受信し、それに応じてデータベースを更新する。 –