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

时间:2013-03-20 16:10:44

标签: algorithm queue message-queue

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

  • 州服务和未服用
  • 起始状态未得到保留。
  • 转换表是:
    • 在非服务状态下,在表示用户请求的HTTP请求上:转换为服务并发出响应。
    • 在服务状态下,在表示用户响应的HTTP请求上:转换到非服务状态并发出响应。
    • 在服务状态下,在十分钟超时:转换到非服务状态并且什么都不做。

问题是:如何可靠地实现此状态机?如果没有超时转换,这可以很容易地实现为具有状态的键值存储,请求处理程序检查存储中的状态以获取响应。

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

我的问题是:除了排队理论问题之外,这个设计是否有任何可怕的问题?有没有比两个队列更好的方法来实现这个状态机?

1 个答案:

答案 0 :(得分:1)

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