首页 > 解决方案 > 在异步作业中使用“睡眠”是否合理?

问题描述

假设我有一个场景,我正在处理工作人员的后台作业。它只是接收托管在远程 CDN 上的文件(图像、视频、pdf、..)的 URL,并且 worker 的工作如下:

  1. 对内存中文件内容的一些处理
  2. 然后调用第 3 方 API 来检索签名的有效 URL,以便将内容上传到同一第 3 方。
  3. 将内容上传到第 3 方 API – 响应包含唯一的文件 ID
  4. 通过 3rd 方 API向用户发送一条消息,其中包含之前收到的唯一文件 ID

现在,问题在步骤(3)和(4)之间。这里的限制是,在我们实际发送包含我们刚刚上传的文件 ID 的消息(步骤 4)之前,第 3 方 API 需要几秒钟来处理文件(步骤 3)。

这里的另一个假设是我需要确保所有 4 个步骤一次执行,例如,没有任何部分失败的机会。

可能的方法

这段逻辑是用 Ruby 构建的,虽然这个问题可能不是非常特定于 Ruby 并且可以适用于其他语言,但我想听听 Ruby 人的想法。

标签: rubyconcurrencyjobsworkerdistributed-system

解决方案


您链接到的API 文档说:

注意力!服务器需要一些时间来处理上传的文件。文件应在短暂超时(几秒钟)后发送到聊天室

我通常会建议不要使用这种性质的东西,但是由于您的供应商特别说“超时”,sleep因此是最好的选择。


推荐阅读