如何扩展多个侦听器的SQS FIFO队列

时间:2019-05-02 18:45:50

标签: amazon-web-services .net-core amazon-sqs fifo event-sourcing

我有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队列是由于事件在系统中的顺序保留!

2 个答案:

答案 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