An events platform must trigger several independent serverless consumers in parallel whenever a ticket is sold: one updates analytics, one issues a confirmation, and more may be added later without changing the publisher. Each consumer runs on AWS Lambda, must process and retry on its own pace, and any message a consumer cannot process after its retries must be set aside automatically for later inspection rather than lost. Which two design choices together meet these requirements? Select TWO.
- APublish each sale to an Amazon SNS topic and subscribe one Amazon SQS queue per consumer, so each consumer reads from its own queue at its own rate. Correct
- BHave the publisher invoke each consumer Lambda function synchronously in a loop so every consumer is called once on each sale.
- CPublish each sale to a single shared Amazon SQS standard queue that all of the consumer Lambda functions poll together for work.
- DConfigure a dead-letter queue on each consumer's Amazon SQS queue and set a maxReceiveCount so messages that exceed the retry limit move there. Correct
- EOn a processing failure publish the message to an Amazon SNS topic so an operator is emailed, then delete the original message from the queue.
Why A is correct: SNS fan-out to one SQS queue per consumer gives every consumer a full, independent copy of each message and lets new subscribers be added without changing the publisher.
Why B is wrong: Direct synchronous invocation couples the publisher to every consumer and forces code changes whenever a consumer is added or removed, which the requirement explicitly forbids.
Why C is wrong: A shared queue lets only one consumer delete each message, so consumers compete for messages rather than each receiving its own copy, breaking the fan-out requirement.
Why D is correct: A redrive policy with maxReceiveCount automatically moves a poison message to the dead-letter queue after the configured retries, preserving it for inspection instead of losing it.
Why E is wrong: Emailing on failure notifies an operator but deleting the message loses the payload, whereas the requirement is to retain failed messages automatically for later inspection.