2012-07-04 154 views
1

我有以下情形:亚马逊SQS消息队列

  • 用于需要进行处理,发送包含工作说明一个消息给一个Amazon SQS消息队列中的作业
  • 我有具有不同的过程做的工作

需要满足以下条件:

  1. 如果一个进程失败要完成一项工作(可能是因为它在崩溃时运行的服务器),则该作业必须再次可用于其他进程。
  2. 当一个工作正在进行时,具有相同描述的其他工作必须等到第一个工作完成或达到其超时。
  3. 根据消息队列的长度,系统应该很容易扩展。

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

+1

当你说“其他有相同描述的工作”时,你是什么意思?我们可能需要更多的细节来帮助。例如,如果我们正在进行图像大小调整,那么将系统限制为一次只能执行一次调整大小操作是没有意义的。 – Jeff

+0

我认为这个问题会更清晰一些,但这里有一些细节:它是关于时间序列(一组历史数据)的计算模式。具有“相同描述”的作业意味着他们必须计算相同时间序列的模式。每当时间序列的历史数据更新时,通过向队列发送相应的消息来触发模式重新计算。 –

回答

1

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

如果接收此作业的计算机无法完成(或无法及时完成),该消息将再次可供新计算机处理。

这个地址#1和#2。

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