amazon-web-services - 如何扩展 SQS FIFO 队列多个监听器

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

我有三个 SQS FIFO 队列,每个队列在 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 Router => SQS FIFO 队列设计的事件溯源架构的全部部分(由于 SNS 不支持 FIFO 队列作为订阅者)

Content-Based Deduplication 已启用以避免队列中的重复消息,因为对于任何队列,Lambda 路由器中始终可能出现错误。

现在,我还将每条消息的 MessageGroupId 设置为 AggregateId 以对它们进行分组,但我并不真正了解消费者端如何使用它;

目前每个 SQS 队列只有一个消费者,但如果我想扩展消费者怎么办。 确保多个消费者不会处理来自同一 MessageGroupId 的消息是应用程序关注的问题; - 这是 Not Acceptable ,因为使用 FIFO 队列是由于系统中事件的顺序保留!

最佳答案

如果一条消息已从 FIFO Amazon SQS 队列接收到并且它仍然不可见(“正在运行”),则 SQS 将不会提供具有相同 MessageGroupId 的另一条消息。

因此,同一队列中的多个消费者将收到具有不同 MessageGroupId 的消息,并且给定 MessageGroupId 中的消息顺序将被保留。

这里重要的是在您希望保持顺序的地方使用不同的 MessageGroupId,但不要对每条消息使用相同的 MessageGroupId

参见:AWS SQS FIFO - How to get more than 10 messages at a time?

关于amazon-web-services - 如何扩展 SQS FIFO 队列多个监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55958466/

相关文章:

javascript - 如何在dynamodb中更新 map 属性

amazon-web-services - 如何指定具有常规公共(public) IP 地址而不是 EIP 的网络接口(interface)?

entity-framework - DotNetCore Entity Framework |通用分页

c# - 如何使用 .net core 中组件的特定实例或另一个装饰器对象解析装饰器

amazon-web-services - 我可以仅在 SQS 中的消息计数达到目标值时触发 lambda 吗?

spring - 我在哪里可以找到 SqsListener

Python + Wand.Image - 使用连续的 pagenumber.jpg 名称将输出图像保存到 AWS

Azure Active Directory - 用户的组声明不是最新的

amazon-web-services - Amazon SQS - 灾难恢复

amazon-web-services - Fargate 的公共(public) IP 上的 HTTPS - 这可能吗?