队列中的消息 location/index(SQS 或 RabbitMQ)
Message location/index in a queue (SQS or RabbitMQ)
我对查找消息在 FIFO 队列中的位置很感兴趣。目标是能够向用户显示 "You are 3rd in line",然后 "You are 2nd in line",然后 "Your request is being processed"。我可以访问 AWS SQS 和 RabbitMQ。我知道我可以获得队列中的消息总数,我只是不知道我关心的消息位于何处。到目前为止,我已经阅读了关于排队技术的文档,但还没有看到解决方案,所以还没有编写代码。有没有其他人能够成功找到一条消息的 index/location?
无法获取项目的 "index"。
你可以做的是估计等待时间(有趣的是,这个概念与 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 分钟),具体取决于您希望达到的准确度。
虽然你也可以通过 "time card" 随机发送物品来进一步完善它(本质上是一个纯粹用于计算通过系统需要多长时间的假物品),你可以只发送这个取而代之的是每个项目的信息。
我对查找消息在 FIFO 队列中的位置很感兴趣。目标是能够向用户显示 "You are 3rd in line",然后 "You are 2nd in line",然后 "Your request is being processed"。我可以访问 AWS SQS 和 RabbitMQ。我知道我可以获得队列中的消息总数,我只是不知道我关心的消息位于何处。到目前为止,我已经阅读了关于排队技术的文档,但还没有看到解决方案,所以还没有编写代码。有没有其他人能够成功找到一条消息的 index/location?
无法获取项目的 "index"。
你可以做的是估计等待时间(有趣的是,这个概念与 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 分钟),具体取决于您希望达到的准确度。
虽然你也可以通过 "time card" 随机发送物品来进一步完善它(本质上是一个纯粹用于计算通过系统需要多长时间的假物品),你可以只发送这个取而代之的是每个项目的信息。