Amazon web services 如果侦听器被杀死,SQS消息会发生什么情况?

Amazon web services 如果侦听器被杀死,SQS消息会发生什么情况?,amazon-web-services,amazon-sqs,Amazon Web Services,Amazon Sqs,比方说,我有一个SQS和一个侦听器进程来侦听该队列。例如,有一条消息,在处理该消息时,该进程自动终止。那么,这个消息会发生什么变化?它会再次进入SQS还是继续飞行?或者,如果配置了,它会转到DLQ吗?您的测量将有一个“隐形超时”。在这段时间内,后续的消息请求不会返回它们 一旦超时过期,消息将由另一个调用返回 “确认”消息后,将不再处理该消息 通常,SQS使用“至少一次”语义。在您队列的最长时间内,它将重新处理消息,直到消息被成功处理为止 如果没有一些真正疯狂的事情(你连续14天没有收到邮件),它

比方说,我有一个SQS和一个侦听器进程来侦听该队列。例如,有一条消息,在处理该消息时,该进程自动终止。那么,这个消息会发生什么变化?它会再次进入SQS还是继续飞行?或者,如果配置了,它会转到DLQ吗?

您的测量将有一个“隐形超时”。在这段时间内,后续的消息请求不会返回它们

一旦超时过期,消息将由另一个调用返回

“确认”消息后,将不再处理该消息

通常,SQS使用“至少一次”语义。在您队列的最长时间内,它将重新处理消息,直到消息被成功处理为止

如果没有一些真正疯狂的事情(你连续14天没有收到邮件),它将确保你的邮件得到处理

这确实意味着您为响应消息而运行的代码需要是幂等的(需要在不更改结果的情况下运行多次)

但是,如果您能够做到这一点,并且您能够以14天以上的速度响应代码中的错误,那么您将被保证能够处理您的消息


这有意义吗?

您的测量将有一个“隐形超时”。在这段时间内,后续的消息请求不会返回它们

一旦超时过期,消息将由另一个调用返回

“确认”消息后,将不再处理该消息

通常,SQS使用“至少一次”语义。在您队列的最长时间内,它将重新处理消息,直到消息被成功处理为止

如果没有一些真正疯狂的事情(你连续14天没有收到邮件),它将确保你的邮件得到处理

这确实意味着您为响应消息而运行的代码需要是幂等的(需要在不更改结果的情况下运行多次)

但是,如果您能够做到这一点,并且您能够以14天以上的速度响应代码中的错误,那么您将被保证能够处理您的消息


这有意义吗?

答案中没有什么疑问:1。你说的隐形超时是什么意思?我在哪能知道要花多少时间?2.您所说的“一旦超时过期,消息将由另一个调用返回”是什么意思?这是否意味着信息将再次以SQS形式出现?3.你说的阿克是什么意思?这是否意味着,如果侦听器接收到消息一次,即使侦听器被杀死,也不会再次处理该消息?队列有一个“默认不可见性超时”,您可以在队列属性中设置。可以通过调用“ChangeMessageVisibility”来覆盖。要“确认”消息,可以调用“删除消息”。抱歉,如果这是“太多的内部消息”,但是“分布式系统”中的“确认”队列有一个“默认不可见超时”,您可以在队列属性中设置。这可以通过调用“ChangeMessageVisibility”来覆盖。要“确认”消息,您可以调用“DeleteMessage”。抱歉,如果这是“太多的内部消息”,但“分布式系统”上下文中的“ack”意味着“确认消息”,或“表明它不再需要处理”,因为它已被处理。如果您非常担心如何正确实现它,我强烈建议使用AWS Lambda及其“异步调用”功能。它只会“做正确的事”。答案中没有什么疑问:1.你所说的隐身超时是什么意思?我在哪里可以看到它会有多少时间?2.你所说的“一旦超时,消息将通过另一个呼叫返回”是什么意思?这是否意味着消息将再次以SQS的形式出现?3.确认是什么意思?这是否意味着,如果侦听器接收到消息一次,即使侦听器被杀死,也不会再次处理该消息?队列有一个“默认不可见超时”,可以在队列属性中设置。可以通过调用“ChangeMessageVisibility”来覆盖该超时。若要“确认”消息,您可以调用“DeleteMessage”。很抱歉,如果这是“太多”,但“分布式系统”中的“确认”队列有一个“默认不可见超时”,您可以在队列属性中设置。这可以通过调用“ChangeMessageVisibility”来覆盖。若要“确认”消息,您可以调用“DeleteMessage”。很抱歉,如果这是“太多”,但“分布式系统”上下文中的“ack”表示“确认消息”,或“表示不再需要处理它”因为它已经被处理过了。如果您非常担心如何正确实现它,我强烈建议您使用AWS Lambda及其“异步调用”功能。它只会“做正确的事情”。