我有一个订阅 SNS 主题的 AWS SQS 队列。队列当前有两个消费者:
(使用 terraform、Java)
问题在于,在任何给定时间,只有其中一个消费者从队列接收消息。据我了解,SQS 旨在将每条消息仅传递给一个消费者。但是,我希望两个消费者独立处理同一条消息。
问题:
代码:
@SqsListener("${app.consumer.shopper-order.queue}")
public void listen(String message) throws JsonProcessingException {
// do stuff
}
任何帮助或指导将不胜感激!
正确的架构是:
这样,每条消息都会发送到两个队列,每个消费者都可以按照自己的节奏独立消费消息。将来添加额外的消费者就很容易了。
请参阅:将 Amazon SNS 通知扇出到 Amazon SQS 队列以进行异步处理 - Amazon Simple Notification Service
或者,将消息发送到 Amazon Kinesis 流,并让使用者从流中提取消息。多个消费者可以从同一个流中读取数据,每个消费者都有自己的“当前指针”。他们还可以重播消息,而不是在消费后删除消息。
从 SQS 队列消费比从 Kinesis 流消费更容易(也更便宜)。