将事件队列用于类似cron的目的是一个坏主意吗?



为了提供更多上下文,我有一个有状态应用程序,其中任务具有以下状态机:

  • 服务状态和未服务状态
  • 启动状态未服务。
  • 转换表为:
    • 在未服务状态下,在表示用户请求的HTTP请求上:转换到已服务并发出响应。
    • 处于服务状态,在表示用户响应的HTTP请求上:转换到未服务状态并发出响应。
    • 处于服务状态,超时10分钟:切换到未服务状态,不做任何事情。
因此,问题是:我如何可靠地实现这个状态机?如果没有超时转换,这可以很容易地实现为具有状态的键值存储,请求处理程序根据存储中的状态检查其响应。

但是,超时转换意味着需要某种队列来处理超时操作。我目前的设计是:一个队列包含由服务线程从队列中取出的未服务任务,另一个队列包含由另一个处理程序根据何时设置为过期而循环使用的服务任务。

因此,我的问题是:除了排队论的问题,这个设计还有什么可怕的地方可能出错吗?有没有比两个队列更好的方法来实现这个状态机?

由于您已经存储了已服务/未服务状态,因此我实际上会保留转换的时间戳。然后,您只需推断的完整状态,而无需所有复杂的(读取:可破坏的)机制。

相关内容

最新更新