【问题标题】:Designing your app to handle FIFO in Amazon SQS设计您的应用程序以处理 Amazon SQS 中的 FIFO
【发布时间】:2014-03-11 10:48:04
【问题描述】:

来自 Amazon SQS 常见问题页面:

Amazon SQS 不保证对 Amazon 中消息的 FIFO 访问 SQS 队列,主要是因为 Amazon 的分布式特性 质量保证。如果您需要特定的消息排序,您应该设计您的 应用程序来处理它。

我的问题是 - 如何以这种方式设计应用程序?

【问题讨论】:

    标签: amazon-web-services fifo amazon-sqs


    【解决方案1】:

    您可以在发送消息时设置消息序列计数器。在接收端,如果顺序正确,您可以继续处理消息。如果出现乱序消息,则等待正确的消息到来(直到将消息存储在按序列号排序的列表中),然后处理正确序列的消息和介于两者之间的其他消息。

    【讨论】:

    • 简而言之就是这样。需要按特定顺序到达的消息可能不适合 SQS,或者可能是概念缺陷的标志。
    • 是的,这可以工作。但是代码会变得非常混乱。有没有更简单的方法?
    • 你怎么知道在编写队列消息时要在代码中使用的下一个 seq 计数器,如果它是一个 api 调用同步。我没有得到那部分。请.. - @pankajbatra
    • @pankajbatra - 此外,如果多个作业正在侦听一个特定队列(这是实际中的常见情况),如何以这种方式处理这种情况?我猜这仅适用于单线程队列侦听器作业?
    【解决方案2】:

    Amazon SQS 刚刚获得FIFO Queues with Exactly-Once Processing & Deduplication

    今天,我们通过支持使 SQS 更加强大和灵活 用于 FIFO(先进先出)队列。 我们正在推出这个新的 现在两个地区的队列类型,并计划在 2017 年初还有许多其他人。

    这些队列旨在保证消息得到处理 仅一次,按照发送顺序,没有重复。 [...]

    [强调我的]

    正如所强调的那样,这些新的 FIFO SQS 队列将使针对手头用例的任何特殊应用程序设计变得不必要,但尚未在所有SQS regions 中提供[最初仅在美国东部(俄亥俄)和美国西部(俄勒冈) ].

    【讨论】:

      【解决方案3】:

      需要按特定顺序到达的消息可能不适合标准SQS 队列。但是,如果序列正确,您可以在发送消息和处理消息时设置消息序列计数器。如果接收端没有收到正确的序列消息,则需要等待正确的消息再进行处理。

      2016 年 11 月 17 日,FIFO 队列已在某些区域(美国东部(俄亥俄)和美国西部(俄勒冈))引入,以补充标准队列。消息发送和接收的顺序被严格保留,消息被传递一次并保持可用,直到消费者处理和删除它;重复项不会被引入队列。 FIFO 队列使用与标准队列相同的 API 操作,接收和删除消息以及更改可见性超时的机制是相同的。但是,在发送消息时,您必须指定消息组 ID。在此处输入图片说明

      【讨论】:

        【解决方案4】:

        不完全是 FIFO,但您可以执行以下操作:
        创建队列:

        • 创建 N 个队列(例如 q1、q2、...、qN)
        • 每个队列有一个上限(每个队列有 M 条消息)

        在队列中插入项目:

        • 写入 SQS 的所有作业将从 q1 开始
        • 如果 q1 有 M 条消息,则移至 q2,依此类推(在 qN 移至 q1 之后)

        从队列中挑选物品:

        • 从 SQS 读取的所有作业将从 q1 开始挑选项目
        • 如果 q1 为空,则移至 q2,依此类推(在 qN 移至 q1 之后)

        您需要确保耗尽一个队列(读取 M 条消息)所花费的时间应该比填充所有队列(推送 NxM 条消息)要少得多。这将确保这批 M 消息将优先于插入队列中的其余消息。 (前 M 条消息 In First M 条消息 Out)

        【讨论】:

          猜你喜欢
          • 2017-04-12
          • 2019-04-11
          • 1970-01-01
          • 2021-11-14
          • 2022-01-09
          • 1970-01-01
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多