Q5 — AWS SAA-C03 第1章

第 5/65 题 | ← 返回第1章

Q5.一家公司在多个 Amazon EC2 实例上托管一个应用程序.应用程序处理来自 Amazon SQS 队列的消息写入 Amazon RDS 表并从队列中删除消息在 RDS 表中偶尔会发现重复记录.SQS 队列不包含任何重复消息.存档的解决方案应该如何确保消息只被处理一次?

正确答案: D. 使用 ChangeMessageVisibility API 调用来增加可见性超时

解析

假设公司的应用程序处理来自Amazon SQS队列的消息,向Amazon RDS表写入消息,并且偶尔会在RDS表中发现重复的记录,尽管SQS队列中没有重复的记录,关键问题是确保每个消息只处理一次。 让我们分析一下这些选项: a .使用CreateQueue API调用来创建一个新的队列——这将简单地创建一个新的SQS队列,但它不能解决重复消息处理的问题。创建新队列不会更改消息的处理方式,也不会确保只处理一次消息。 B.使用AddPermission API调用来添加适当的权限——为SQS队列控件添加可以从队列发送或接收消息的权限。它不会影响消息的处理方式或确保消息的幂等性(可以多次执行而不会更改初始执行之后的结果的操作的属性)。 C.使用ReceiveMessage API调用来设置适当的等待时间- ReceiveMessage API调用允许您从队列中检索消息,但是设置等待时间并不能确保消息只被处理一次。等待时间控制API调用在返回空结果之前等待消息到达的时间。 D.使用ChangeMessageVisibility API调用来增加可见性超时——虽然增加可见性超时(Amazon SQS阻止其他消费者接收和处理消息的时间)可以帮助防止其他消费者并发地处理相同的消息,但这并不是解决重复处理问题的直接方法。然而,结合健壮的消息处理策略,它可以成为解决方案的一部分。 确保消息只处理一次的关键是实现一个消息处理策略,该策略包括: 幂等操作:确保应用程序执行的操作(例如,写入RDS表)是幂等的,这意味着它们可以被执行多次而不会改变初始执行后的结果。应用程序级别的重复数据删除:在应用程序中实现检测和处理重复消息的逻辑。这可能涉及在插入新记录之前检查RDS表中是否存在记录。消息属性和消息id的使用:SQS消息具有唯一的MessageId,可用于跟踪已处理的消息。将这些id存储在RDS表(或其他存储解决方案)中可以帮助识别重复项。适当地管理可见性超时:增加可见性超时可以让应用程序有更多的时间来处理消息,并在消息对其他使用者可见之前将其从队列中删除。但是,必须确保应用程序在处理完成后将消息从队列中删除。在提供的选项中,没有一个直接解决重复处理的根本原因。然而,如果我们必须在一个全面的解决方案中选择最相关的步骤,那将是确保应用程序逻辑适当地处理副本,并可能与使用ChangeMessageVisibility API调用一起管理可见性超时。然而,这个问题要求的是直接行动,在这种情况下,最接近的选项是: 确保应用程序的消息处理逻辑足够健壮以处理重复,这间接涉及到正确管理消息生命周期,包括可见性超时。考虑到问题的严谨性和所提供的选项,更准确的回答应该是解释对组合策略的需求,包括幂等操作、应用程序级别的重复数据删除和适当的消息生命周期管理。但是,如果我们必须选择一个选项,那么值得注意的是,所提供的API调用都不能直接解决重复处理问题。相反,应该关注应用程序逻辑和流程设计。 考虑到问题的格式,一个接近的解释可能是: D.使用ChangeMessageVisibility API调用来增加可见性超时——虽然不是完整的解决方案,但增加可见性超时可以作为策略的一部分,为应用程序提供更多时间来处理消息,并确保它从队列中删除,从而减少重复处理的机会。但是,必须将其与应用程序中的幂等操作和重复数据删除逻辑结合起来。