【问题标题】:How to scale a SQS FIFO queue multiple listeners如何扩展 SQS FIFO 队列多个侦听器
【发布时间】:2019-05-02 18:45:50
【问题描述】:

我有三个 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 路由器 => SQS FIFO 队列(由于 SNS 不支持将 FIFO 队列作为订阅者)

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 正是我正在寻找的解释!谢谢。看起来我可以根据 AgreggateId 进行扩展:-)
    • 最后对MessageGroupId的解释很好!!
    猜你喜欢
    • 2017-04-12
    • 2019-04-11
    • 1970-01-01
    • 2013-09-24
    • 2016-12-31
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多