我们有一个计划任务(使用自定义Windows服务),每5分钟调用一次API端点。通常,此端点在5分钟内完成,但有时需要更长时间 - 在这些情况下,当计划任务下次调用API时,API知道先前的请求仍在处理,因此跳过该时间的处理。这将持续到原始请求完成,然后在下次调用API时,再次开始处理。这意味着我们永远不会得到重叠处理。
我们将这些状态记录在数据库中,我们在处理开始和结束时存储这些状态。当调用API时,它会检查这些状态,如果记录的进程尚未完成,则它知道进程正在进行,因此会跳过它。
如果进程抛出异常,则API会更新数据库中的状态,因此下一个API请求知道它可以安全启动,因为最后一个请求失败。
当API在抛出异常时可以更新状态时,这一切都正常工作,但我们已经遇到API请求立即停止并且没有机会更新状态的情况在数据库中。因此,后来对API的调用都假设处理仍在进行中,并且没有再处理任何事情。
我们可以使用一种好的模式或方法来避免这种情况吗?有没有办法准确记录API进程何时运行,何时失败(即使在故障期间无法记录任何内容)?