假设我有 2 台服务器。
第一个是提供一些计算的服务,可以持续很长时间(几分钟到几小时)。
第二台服务器将使用此服务来计算一些数据。
我正在尝试为第一台服务器设计一个 REST API,到目前为止一切都很好。但我想听听一些关于如何在长期任务完成后对通知建模的意见。
到目前为止,我考虑了两种方法:
- 轮询 - 第二台服务器将不时询问结果。
- 回调 - 第二台服务器将为第一个服务器设置一个 uri,以便在完成后调用。但这在 REST API 中有点味道。
你怎么看?
假设我有 2 台服务器。
第一个是提供一些计算的服务,可以持续很长时间(几分钟到几小时)。
第二台服务器将使用此服务来计算一些数据。
我正在尝试为第一台服务器设计一个 REST API,到目前为止一切都很好。但我想听听一些关于如何在长期任务完成后对通知建模的意见。
到目前为止,我考虑了两种方法:
你怎么看?
对于您的情况,我会选择投票。当第二台服务器发出在第一台服务器上创建作业的初始请求时,它应该得到一个包含最终状态页面 url 的响应。然后,第二台服务器每 5-15 分钟轮询一次该 url 以检查作业的状态。如果第一台服务器将该 url 设为 RSS 或 Atom 提要,那么用户也可以将其 RSS 阅读器指向相同的 url,并自行判断工作是否完成。当人和机器都可以从单一来源获取信息时,这是一个真正的胜利。
如果你使用 Python,你可以利用 RabbitMQ 和 Celery 来完成这项工作。Celery 允许您在队列中创建一个项目,然后暂停执行您正在运行的任何项目(即:Django),这样您就可以在队列处理器的输出可用时使用它。无需轮询或回调。