情境:
弹性beanstalk环境有一些Web服务器,它们向另一个工作环境发送请求以供用户注册等。
问题:
当其中一台工作机器完成任务时,我也希望它向网络服务器发送确认。
似乎SQS没有“确认”消息。
当我们卸载工作以发送电子邮件时,我也想让网络服务器知道发送电子邮件是成功的。
我可以做的一个解决方案是实现Web服务器轮询的另一个队列,但是,许多服务器可以在同一队列上轮询,服务器1 的确认可以通过接收服务器2 ,我们需要等待消息的超时,但服务器3 可能会拦截该消息。 服务器1 可能需要等待一段时间才能得到确认。
答案 0 :(得分:2)
您的工人加工的方式"确认"他们处理的消息是从队列中删除它。队列消息的生命周期是:
正在删除的邮件是确认已成功处理。
如果工作人员在步骤4中没有删除该消息,那么该消息将在指定的超时后重新出现在队列中,并且下一个检查消息的工作人员将获取并处理它。
如果您担心某条消息可能无法处理并永远重新出现在队列中,您可以设置一个死信"队列。在收到指定次数但从未删除的消息后,该消息将被转移到死信队列,在那里您可以处理这些异常情况。
亚马逊的简单队列服务Developer Guide对此生命周期有一个清晰明确的解释,以及如何确保每条消息都被处理或移动到死信队列以进行特殊处理。