我有三个SQS队列,每个队列在EC2实例中都有一个数据投影侦听器守护程序作为docker pod (SQL Server、PostgreSQL、Elastic Search等)。
所有队列都具有如下相同的设置(稍后设置的死信队列)。
Queue Type: FIFO
Messages Delayed: 0
Content-Based Deduplication: Enabled
Default Visibility Timeout: 30 seconds
Message Retention Period: 14 days
Maximum Message Size: 256 KB这是我正在设计的使用DynamoDB Stream => Lambda SQS => SQS队列的事件源架构的一部分(由于SNS不支持作为订阅者的先进先出队列)
启用Content-Based Deduplication以避免队列中的重复消息,因为任何队列的Lambda路由器中总是可能出现错误。
现在,我还将每条消息的MessageGroupId设置为AggregateId,以对它们进行分组,但并不真正理解消费者端是如何利用这一点的;
目前,每个SQS队列只有一个消费者,但如果我想扩展消费者该怎么办。确保多个使用者不会处理来自同一MessageGroupId的消息是应用程序关心的问题;-这是不可接受的,因为使用先进先出队列是由于系统中事件的顺序保留!
发布于 2019-05-03 08:49:18
如果从FIFO Amazon SQS队列接收到一条消息,但该消息仍然不可见(“正在进行”),则SQS将不会提供具有相同MessageGroupId的另一条消息。
因此,同一队列上的多个使用者将接收具有不同MessageGroupId的消息,并且给定MessageGroupId内的消息顺序将被保留。
这里很重要的一点是,在希望保持顺序的地方使用不同的MessageGroupId,但不要对每条消息使用相同的MessageGroupId。
请参阅:AWS SQS FIFO - How to get more than 10 messages at a time?
https://stackoverflow.com/questions/55958466
复制相似问题