为了提供更多上下文,我有一个有状态的应用程序,其中任务具有以下状态机:
- 各州有服务和无服务
- 开始状态是未服务的。
- 转换表为:
- 在未服务状态下,在代表用户请求的 HTTP 请求上:转换为已服务并发出响应。
- 在服务状态下,在代表用户响应的 HTTP 请求上:转换到未服务状态并发出响应。
- 在服务状态,十分钟超时:转换到未服务状态并且什么都不做。
因此问题是:我如何可靠地实现这个状态机?如果没有超时转换,这可以很容易地实现为带有状态的键值存储,请求处理程序检查存储中的状态以获取响应。
但是,超时转换意味着需要某种队列来处理超时操作。我目前的设计是:一个队列包含由服务线程出列的未服务任务,另一个队列包含由另一个处理程序根据它们设置为过期时间循环通过的服务任务。
因此,我的问题是:除了排队理论问题之外,这种设计是否有任何可怕的事情会出错?有没有比两个队列更好的方法来实现这个状态机?