定期的なサービスのために、Atlas と組み合わせて Quartz を検討しています。1 日に 1 回実行するプログラムがあります (メールボックスをスキャンして特定のメールを探します)。結果が出れば、翌日また実行したいです。結果がない場合、たとえば 15 分後にジョブを再度実行する必要があります。その理由は、メールが常に時間通りに到着するとは限らないためです。
1 に答える
1
ジョブを固定スケジュール (たとえば 15 分ごと) で実行し、ロジックが最後に正常に取得された日付を追跡するとしたらどうでしょうか。
次に、ジョブが開始された場合、最後に成功した日付が今日であることを確認し、メールボックス スキャンのロジックをスキップします。
より複雑な (追跡が難しい) バージョンが必要な場合は、新しいトリガーをスケジュールすることも常に可能です。
- 実行に失敗した後、DateTime.UtcNow.AddMinutes(15) で 1 回実行する新しいトリガーをスケジュールします。
- 実行が成功したら、明日の開始日でトリガーをスケジュールするだけです
トリガー スケジューリングの目的で、スケジューリング コンテキストを介してジョブからスケジューラにアクセスできます。サーバーがダウンした場合、再起動時にデータがすでにロードされているかどうかを確認する必要があります。これは、最初のより単純なアプローチをサポートする可能性があります。
于 2013-10-20T10:29:15.487 に答える