2

フライトやバスのチケットなどを予約するための旅行アプリケーションを開発しています。フライトチケットについては、最初にPNR(Passenger Name Record)が生成され、それを通じてチケットのPNR確認が行われます。

問題は、PNRを生成してから12時間以内にチケットが確認されない場合、PNRをキャンセルする必要があることです。そうでない場合は、AirGDSプロバイダーからのペナルティに直面します。

これまで、15分ごとにこのことを行うCronスケジューラを作成しました。このようにすることで問題が発生し、ペナルティにも直面しました。スケジューラーを毎分実行することはできません。

予約されていない場合、12時間生成した後、PNRをキャンセルするにはどうすればよいですか?

4

6 に答える 6

7

これはJavaとタグ付けされているので、次のいずれかを調べることをお勧めします

これらは、将来実行されるタスクをスケジュールするための標準的なソリューションです。

于 2012-08-24T05:36:06.497 に答える
3

aioobeの提案に加えて、ScheduledExecutorServiceスケジュールされたエグゼキューターのキャンセルも確認します。これが次の質問になると確信しているからです;)

于 2012-08-24T05:40:45.513 に答える
1

Timerとを使用してこれを行うことができますTimerTask

 1. Write the code to fire an event in Timertask. 
 2. Schedule the TimerTask after 12 hours using schedule() method.
于 2012-08-24T05:43:25.940 に答える
1

Quartzスケジューラを使用できます

非同期ジョブスケジューリングを確認しましたか?

于 2012-08-24T05:47:26.140 に答える
1

aioobeは、この種の問題を解決するためのいくつかの優れたリファレンスを提供しました。ただし、JVMをシャットダウンして再起動する必要がある場合にタイマーやその他の一時的なものが消えることを心配せずに問題を解決したい場合は、次のような簡単なアプローチも検討することをお勧めします。

public class PNRExpirationThread extends Thread {
    @Override
    public void run() {
        while (true) {  //or while !stop, or while Server.isRunning(), you get the idea
            try {
                Thread.sleep(30000);  //wait 30 seconds; adjust this to your liking
                //it's pseudo-SQL, but you get the idea; I'm assuming your data model has the required fields for this to work
                Database.executeTxn("DELETE FROM pnrRecords WHERE NOW() - createDate > 12h AND confirmed = 0");  
            }
            catch (Throwable ignored) {
            }
        }
    }
}

次に、サーバーの起動/初期化ルーチンに次のようなコードを追加します。

//keep a reference to this if you want to terminate the thread gracefully at shutdown time
new PNRExpirationThread().start();

次に、プラットフォームは30秒間隔で12時間より古いレコードを自動的に照会して削除します。

于 2012-08-24T05:49:42.163 に答える
0

Timer.schedule(TimerTask、long)を使用すると、タスクをある程度の遅延(この場合は12時間)後に実行するようにスケジュールできます。ただし、希望する時点での実行は保証されません。ドキュメントから:

このクラスはリアルタイムの保証を提供しません。Object.wait(long)メソッドを使用してタスクをスケジュールします。

それはあなたが望むようにうまくいくかもしれないし、うまくいかないかもしれません。

于 2012-08-24T05:40:54.863 に答える