我们正在开发用于预订机票,巴士票等的旅行应用程序。对于机票,最初将生成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小时以上的记录。