SQS - 消息传递的程度有多远?

时间:2018-03-09 15:11:49

标签: amazon-sqs

我有一个SQS的用例,我将发送有关系统内特定对象的消息。每个对象最多每20秒会有一条消息,并且有数十万(可能是数百万)对象,这意味着我每秒将处理数万(可能是数十万)个消息。消息量排除了使用FIFO队列。

大多数时候,我并不关心有序消息传递。如果两个不同对象的消息以不同于它们发出的顺序传递,那很好。可能存在问题的是,如果与同一对象相关的两条消息无序传递。

鉴于每个对象每20秒只有一个事件,20 seconds is an eternity in computing time,我觉得两个消息相隔20秒(可能有数百万条消息)发送的可能性很小不按顺序。也就是说,我还没有找到任何关于SQS无序交付的硬数据。我知道这可能发生,但我还没有看到任何关于它的测量数据。

我想知道是否有任何类型的测量数据可以显示消息传递的概率X无序时间或X消息无序。

1 个答案:

答案 0 :(得分:0)

SQS不保证非FIFO队列中消息出现的混乱程度。

我所看到的与您寻找的最相关的度量是this experiment,该度量找到了将消息提交到队列后可进行轮询的处理时间。如果您想复制实验以收集自己的指标,它们还具有指向源代码的链接。

如果您绝对必须按原始顺序使用它们,则可以选择几种方法。它们不一定是好的选择,但它们是选择。

  1. 确定一种将对象ID水平划分为 n 个存储桶并使用 n 个不同的FIFO队列的方法。 (可能是最好的选择。)
  2. 在消息中添加您自己的序列号。
  3. 根据当前时间将邮件划分为队列。依次排干每个队列。 (例如,您可能只发布到单个队列4秒钟,然后依次轮流浏览15个队列。)
  4. 使用数据库并以允许您获取最早消息的方式存储消息时间戳。