队列中的消息位置/索引(SQS或RabbitMQ)

时间:2019-02-21 19:51:21

标签: java rabbitmq queue amazon-sqs

我有兴趣在FIFO队列中查找消息的位置。目标是能够向用户显示“您是第3行”,然后是“您是第2行”,然后是“正在处理您的请求”。我可以访问AWS SQS和RabbitMQ。我知道我可以获取队列中消息的总数,但是我不知道我关心的消息位于何处。到目前为止,我已经阅读了有关排队技术的文档,但是还没有找到解决方案,因此尚未编写任何代码。其他人是否能够成功找到单个邮件的索引/位置?

1 个答案:

答案 0 :(得分:1)

不可能获得项目的“索引”。

但是,您可以做的是估计等待时间(有趣的是,此概念与how Disneyland measures wait time in their lines非常相似):

  1. 测量以下数据点(并知道它们何时更改):
    • parallelism-并行处理多少个项目?
    • processingTime-处理一件物品需要多长时间?
    • queueLength-队列中有多少个项目?
  2. 计算估算值:
    • waitTimeOfNextItem = queueLength * processingTime / parallelism

例如,如果队列中有100个项目,每个项目大约需要10秒钟来处理,并且一次处理4个,那么将花100*10/4或250秒来处理所有项目。如果将第101个项目放入队列,您可以估计它将在250秒后开始处理。

如果您的processingTime变化很大,则可以进行计算,例如滚动平均值或采样,或者根据您希望的准确度提供一个时间范围(5-10分钟)。

虽然您还可以随机发送“时间卡”项目以进一步完善(基本上是一个伪造的项目,其目的纯粹是为了计算通过系统所需的时间),但您可以随项目。