【问题标题】:Is it a bad idea to use an event queue for cron-like purposes?将事件队列用于类似 cron 的目的是不是一个坏主意?
【发布时间】:2013-03-20 16:10:43
【问题描述】:

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

  • 服务状态和未服务状态
  • 起始状态未提供。
  • 转换表是:
    • 在未服务状态下,在代表用户请求的 HTTP 请求上:转换为已服务并发出响应。
    • 在服务状态下,在代表用户响应的 HTTP 请求上:转换到未服务状态并发出响应。
    • 处于服务状态,超时十分钟:转换到未服务状态并且什么都不做。

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

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

因此,我的问题是:除了排队理论问题之外,这种设计是否有任何可怕的事情会出错?有没有比两个队列更好的方式来实现这个状态机?

【问题讨论】:

    标签: algorithm queue message-queue


    【解决方案1】:

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

    【讨论】:

    • 保留时间戳固然不错,但我需要保证这种状态转换会在一定时间内发生。诱惑是懒惰地做,但是什么交互会将服务状态移动到未服务队列?
    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多