【问题标题】:API with Work Queue Design Pattern具有工作队列设计模式的 API
【发布时间】:2013-10-10 06:26:41
【问题描述】:

我正在构建一个连接到工作队列的 API,但我遇到了结构问题。我正在寻找的是一种通过 API 连接的工作队列的设计模式。

详情:

我正在使用 Node.js 服务器和 Express 创建一个接受请求并返回 JSON 的 API。这些请求可能需要很长时间来处理(非常数据密集型),所以这就是我们使用排队系统(RabbitMQ)的原因。

例如,假设我向 API 发送了一个需要 15 分钟处理的请求。 Express API 格式化请求并将其放入 RabbitMQ (AMQP) 队列。下一个可用的工作人员将请求从队列中取出并开始处理它。完成后(在本例中为 15 分钟),它将数据保存到 MongoDB 中。 ....现在是什么.....

我的问题是,如何将完成的数据返回给 API 的调用者?调用者是一个完全独立的程序,它通过 Ajax 请求之类的方式联系 API。

worker 会将处理后的数据保存到数据库中,但我无法推回原来的调用程序。

有没有人有任何带有工作队列资源的 API?

请,谢谢。

【问题讨论】:

    标签: node.js api queue amqp worker


    【解决方案1】:

    在客户端发起调用时,您应该向客户端返回一个任务标识符,该标识符将与数据一起持续到 MongoDB。

    然后您可以为客户端提供额外的 API 方法来检查任务的状态。此方法应采用单个参数,即任务标识符,并检查具有该标识符的文档是否已进入您在 MongoDB 中的集合中。如果不存在则返回 false,如果存在则返回 true。

    客户端将不得不反复轮询(但可能以 1 分钟的间隔)任务状态 API 方法,直到它返回 true。

    【讨论】:

    • 你知道这种东西是不是设计模式?我认为这会有一个共同的结构,似乎会被大量使用。
    • 这符合distributed computing 周围的大多数概念。如果您想命名它,维基百科文章指的是“消息传递模型中的并行算法”,这是一个适用的描述。在这里,虽然您的一种算法无法启动消息传递,但它可以响应并报告其状态(完成或未完成)。
    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多