亚马逊消息队列服务(SQS)发送和确认

时间:2014-06-19 16:25:20

标签: amazon-web-services amazon-sqs

情境:

弹性beanstalk环境有一些Web服务器,它们向另一个工作环境发送请求以供用户注册等。

问题:

当其中一台工作机器完成任务时,我也希望它向网络服务器发送确认。

似乎SQS没有“确认”消息。

当我们卸载工作以发送电子邮件时,我也想让网络服务器知道发送电子邮件是成功的。

我可以做的一个解决方案是实现Web服务器轮询的另一个队列,但是,许多服务器可以在同一队列上轮询,服务器1 的确认可以通过接收服务器2 ,我们需要等待消息的超时,但服务器3 可能会拦截该消息。 服务器1 可能需要等待一段时间才能得到确认。

1 个答案:

答案 0 :(得分:2)

您的工人加工的方式"确认"他们处理的消息是从队列中删除它。队列消息的生命周期是:

  1. Web服务器发送带有请求的消息。
  2. 工人收到消息。
  3. 工作人员成功处理邮件。
  4. 工作人员删除该消息。
  5. 正在删除的邮件是确认已成功处理。

    如果工作人员在步骤4中没有删除该消息,那么该消息将在指定的超时后重新出现在队列中,并且下一个检查消息的工作人员将获取并处理它。

    如果您担心某条消息可能无法处理并永远重新出现在队列中,您可以设置一个死信"队列。在收到指定次数但从未删除的消息后,该消息将被转移到死信队列,在那里您可以处理这些异常情况。

    亚马逊的简单队列服务Developer Guide对此生命周期有一个清晰明确的解释,以及如何确保每条消息都被处理或移动到死信队列以进行特殊处理。