【问题标题】:Message location/index in a queue (SQS or RabbitMQ)队列中的消息位置/索引(SQS 或 RabbitMQ)
【发布时间】:2019-02-21 19:51:20
【问题描述】:

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

【问题讨论】:

    标签: java rabbitmq queue amazon-sqs


    【解决方案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 分钟),具体取决于您希望达到的准确度。

    虽然您也可以随机发送“时间卡”项目以进一步完善这一点(本质上是一个纯粹用于计算通过系统所需时间的假项目),您可以只发送此信息与每个项目。

    【讨论】:

    • 感谢这个有趣的概念。我确实有广泛的处理时间,但已经能够将其标准化并缓冲我的时间以足够接近。我很欣赏新的视角,它已经很好地解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2013-08-09
    • 2012-10-21
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    相关资源
    最近更新 更多