我有3个SQS FIFO队列,其中每个队列在EC2实例中都有一个数据投影侦听器守护程序作为docker容器(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 Router => SQS FIFO队列(由于SNS不支持将FIFO队列作为订户)设计的事件源体系结构的全部内容
启用 Content-Based Deduplication
可以避免队列中出现重复消息,因为在Lambda路由器中对于任何队列总是可能出现错误。
现在,我也已将每个消息的MessageGroupId
设置到AggregateId进行分组,但实际上还不了解消费者端如何利用它;
目前,每个SQS队列只有一个消费者,但是如果我想扩展消费者,该怎么办。 应用程序是否要确保多个使用者不会处理来自同一MessageGroupId的消息? -这是不可接受的,因为使用FIFO队列是由于事件在系统中的顺序保留!
答案 0 :(得分:1)
如果已从FIFO Amazon SQS队列接收到一条消息,但该消息仍然不可见(“运行中”),则SQS将不会提供具有相同MessageGroupId
的另一条消息。
因此,同一队列上的多个使用者将接收到具有不同MessageGroupId
的消息,并且将保留给定MessageGroupId
内的消息顺序。
这里重要的是在希望保留顺序的地方使用不同的MessageGroupId
,但不要对每条消息使用相同的MessageGroupId
。
请参阅:AWS SQS FIFO - How to get more than 10 messages at a time?
答案 1 :(得分:1)
如果您仍然需要它,则现在存在SNS FIFO主题=)https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html