在微服务架构中,假设我们有一个api来做预订。用户尝试预订座位,但在支付模式下失败。座位状态阻塞了一段时间(2分钟)。这个座位怎么能在2分钟后自动让出?
如果我们认为一个批处理作业以一定的频率运行,它可能会在超过2分钟后释放它,这取决于它最后一次运行的时间。
对于这类问题还有什么其他的解决方案吗?
有几种不同的方法可以做到这一点。最常见的两种:
-
负责跟踪给定放映轨道预订的座位可用性的服务。当用户开始一个座位的预订过程时,它会用一个唯一的ID记录一次预订,并写上"截止日期"。1个座位的时间戳。如果在"截止日期"之前预订成功,则该预订将被转换为实际预订。如果"到期"于";"时间戳过去了,预订没有被转换,服务报告这些座位是可用的。在此之后,服务是否以及何时选择删除预订是一个实现细节(例如,您可能保留陈旧的预订,仅在需要时取消最老的陈旧预订,以确保活动预订和陈旧预订的总和不超过可用的座位数量)。
-
你可以定义一个调度服务:提交一个表示,例如,一个请求和一个特定的服务。该提交的结果是一个令牌,以便可以取消日程表。服务跟踪下一个请求/操作的时间,并等待到该时间点执行该请求/操作。
请注意,如果没有完成购买,则座位自动变为可用的任何方法都存在这样一种情况,即座位被预订并成功支付,但座位被释放回池并由其他人购买,因此必须定义一些流程来处理这些情况(例如,将付款与发出的门票进行协调)。