我有兴趣在FIFO队列中查找消息的位置。目标是能够向用户显示“您是第3行”,然后是“您是第2行”,然后是“正在处理您的请求”。我可以访问AWS SQS和RabbitMQ。我知道我可以获取队列中消息的总数,但是我不知道我关心的消息位于何处。到目前为止,我已经阅读了有关排队技术的文档,但是还没有找到解决方案,因此尚未编写任何代码。其他人是否能够成功找到单个邮件的索引/位置?
答案 0 :(得分:1)
不可能获得项目的“索引”。
但是,您可以做的是估计等待时间(有趣的是,此概念与how Disneyland measures wait time in their lines非常相似):
parallelism
-并行处理多少个项目?processingTime
-处理一件物品需要多长时间?queueLength
-队列中有多少个项目?waitTimeOfNextItem = queueLength * processingTime / parallelism
例如,如果队列中有100个项目,每个项目大约需要10秒钟来处理,并且一次处理4个,那么将花100*10/4
或250秒来处理所有项目。如果将第101个项目放入队列,您可以估计它将在250秒后开始处理。
如果您的processingTime
变化很大,则可以进行计算,例如滚动平均值或采样,或者根据您希望的准确度提供一个时间范围(5-10分钟)。
虽然您还可以随机发送“时间卡”项目以进一步完善(基本上是一个伪造的项目,其目的纯粹是为了计算通过系统所需的时间),但您可以随项目。