1

我有以下情况:

  • 对于需要处理的作业,将包含作业描述的消息发送到 Amazon SQS 消息队列
  • 我有不同的流程要做这些工作

需要满足以下条件:

  1. 如果一个进程未能完成一项作业(可能是因为它正在运行的服务器崩溃),则该作业必须再次可供其他进程使用。
  2. 在处理一个作业时,具有相同描述的其他作业必须等到第一个作业完成或达到其超时时间。
  3. 系统应该可以根据消息队列长度轻松扩展。

为了确保(1),我的第一个想法是使用 Amazon SQS 队列提供的消息锁定功能,但是我如何确保(2)呢?将流程分配给工作描述将是一种选择,但是(3)会更加困难。

4

1 回答 1

1

设置更长的“VisibilityTimeout”值。确保此值比完成作业通常所需的时间长。

如果接收此作业的机器未能完成它(或未能及时完成),则该消息将再次可供新机器处理。

这解决了#1 和#2。

对于#3,我相信您可以根据 SQS 队列的大小设置自动缩放触发器,因此如果您有更多消息,AWS 将自动启动新实例来处理它们。

于 2012-10-05T08:44:21.713 回答