如何防止其他工作人员访问当前正在处理的消息?

How to prevent other workers from accessing a message which is being currently processed?

我正在从事一个项目,该项目需要多个工作人员访问同一个队列以获取有关他们将处理的文件的信息。文件大小不等,从几兆字节到数百千兆字节。出于这个原因,可见性超时似乎没有意义,因为我无法确定需要多长时间。我有几个方法,但如果有更好的方法,请告诉我。

  1. 消息从原队列中删除,放入 “等待”队列。当程序处理完文件后,它 删除它,否则消息从队列中删除并放入 回到原来的队列。

  2. 邮件 ID 已通过数据库检查。如果消息id是 找到了,就忽略了。否则程序开始处理 消息并将消息 ID 插入数据库。

提前致谢!

使用默认提供的 SQS 超时,但要利用 ChangeMessageVisibility

您可以通过多种方式指定超时:

  • 创建队列时(默认超时)
  • 检索消息时
  • 通过让工作人员回调 SQS 并延长超时时间

如果您担心不知道合适的处理时间,请使用适用于大多数情况的默认值,但不要将其设置得太大以至于无法处理变得不必要的延迟。

然后,将您的工作人员修改为定期对 SQS 进行 ChangeMessageVisiblity 调用以延长超时时间。如果一个 worker 死亡,消息将停止扩展,它将重新出现在队列中,由另一个 worker 处理。

参见:MessageVisibility documentation