3

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

细节:

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

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

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

工作人员会将处理后的数据保存到数据库中,但我无法推回原始调用程序。

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

谢谢,麻烦您了。

4

1 回答 1

3

On the initiating call by the client you should return to the client a task identifier that will persist with the data all the way to MongoDB.

You can then provide an additional API method for the client to check the task's status. This method should take a single parameter, the task identifier, and check if a document with that identifier has made in into your collection in MongoDB. Return false if it doesn't exist yet, true when it does.

The client will have to repeatedly poll (but maybe at a 1 minute interval) the task status API method until it returns true.

于 2013-10-09T22:21:40.543 回答