是否可以估计SQS消息在队列中的位置?

时间:2018-02-11 06:36:12

标签: amazon-web-services amazon-sqs

我的预感是答案是" no",这是我接受的答案。我可以收到您的确认吗?

我有一个电子项目,一次感谢捐赠者,从SQS队列中读取成功捐赠。目前我有一个感谢设备",但如果需求增长,这可以扩展,使得Amazon SQS成为管理队列分配的良好候选者。

由于设备一次只能感谢一个人,SQS队列有时可能会很快填满。给捐赠者一个状态更新是很好的,他们的捐款在队列中排在第5位,例如。这是"在线#34; SQS可以使用状态更新选项吗?

将项目添加到队列时,它会返回指定的序列号作为响应的一部分:

{
  ResponseMetadata: { RequestId: 'aaaaaaaa-9ee6-58e4-a511-7f731ebe8145' },
  MD5OfMessageBody: 'aaaaaaaa80be1add497c0685c1e426a5',
  MessageId: 'aaaaaaaa-f4e2-4ff5-a3ec-9d017585f60b',
  SequenceNumber: '18835430100687855616' 
}

这个数字在单个队列中不是连续的,可能会使用这个数字作为现场排队的帮助。作为一个例子,这里有两个序列号,它们在几秒钟之内将两个项目添加到队列中后返回:

18835430099287791616
18835430100687855616

我可以使用get-queue-attributes在捐赠成功时获得队列中的捐赠总数(ApproximateNumberOfMessages)。这将有助于获得初步估计。

头脑风暴超出可接受的范围"否"回答:

也许我可以在某个地方存储一个计数器,以便在每个捐赠者会话中更新需要首先感谢的其他捐赠者的大致数量?目前,我看到处理的计数存储在单记录dynamo-db表中(可能不是最佳用例)或作为JSON doc存储在S3中(尽管这可能会在规模上变得混乱,也许不是)。当捐赠成功时,捐赠者会收到处理感谢的初始计数和估计的队列长度,其中增量计算可以间隔发生。

我很开心。

1 个答案:

答案 0 :(得分:1)

我不知道任何支持的机制来确定在任何给定时间特定消息在SQS队列中的位置。

但是,正如您所说,您可以使用GetQueueAttributes检索消息添加到队列时队列中可见消息数的近似值。您可以将此信息存储在DynamoDB中,也可以维护SQS消息的近似处理速率指标(或从CloudWatch利用SQS queue metrics)。这可能用于估计处理消息所需的时间。