我们正在开发用于预订机票,巴士票等的旅行应用程序。对于机票,最初将生成PNR(旅客姓名记录),并通过PNR进行机票确认。

问题是,如果在生成PNR后的12小时内未确认票证,则必须取消PNR。否则,我们将面临Air GDS提供商的处罚。

到目前为止,我们已经编写了Cron Scheduler,它每15分钟执行一次此操作。这样做会给我们带来麻烦,并且还会面临惩罚。我不能每分钟都运行调度程序。

如果未预订,则在生成12小时后如何取消PNR。

最佳答案

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小时以上的记录。

10-04 19:25