Расположение сообщения / индекс в очереди (SQS или RabbitMQ) - PullRequest
0 голосов
/ 21 февраля 2019

Мне интересно найти местоположение сообщения в очереди FIFO.Цель состоит в том, чтобы иметь возможность отображать пользователю «Вы 3-й в очереди», затем «Вы 2-й в очереди», а затем «Ваш запрос обрабатывается».У меня есть доступ к AWS SQS и RabbitMQ.Я знаю, что могу получить общее количество сообщений в очереди, я просто не знаю, где находится сообщение, которое мне небезразлично.До сих пор я читал документы по технологиям организации очередей, но пока не нашел решения, поэтому код еще не написан.Кто-нибудь еще смог успешно найти индекс / местоположение отдельного сообщения?

1 Ответ

0 голосов
/ 03 марта 2019

Невозможно получить «индекс» элемента.

Что вы можете сделать, так это получить оценку времени ожидания (что интересно, эта концепция очень похожа как Диснейленд измеряет время ожидания в своих строках ):

  1. Измерьте следующие точки данных (и узнайте, когда они изменятся):
    • parallelism - Сколькоэлементы обрабатываются параллельно?
    • processingTime - Сколько времени занимает обработка элемента?
    • queueLength - Сколько элементов в очереди?
  2. Рассчитать оценку:
    • waitTimeOfNextItem = queueLength * processingTime / parallelism

Например, если в очереди 100 элементов, и каждый займет около10 секунд на обработку, и вы обрабатываете 4 сразу, тогда для обработки всех элементов потребуется 100*10/4 или 250 секунд.Если бы в очередь был помещен 101-й элемент, можно было бы ожидать, что он начнет обрабатываться через 250 секунд.

Если ваш processingTime сильно варьируется, вы можете выполнять вычисления, такие как скользящее среднее или выборка, или указывать временной диапазон (5-10 минут), в зависимости от того, насколько точным вы хотите быть.

В то время как вы также можете случайным образом посылать элементы «временной карты», чтобы уточнить это далее (по сути, поддельный элемент, который имеет целью просто подсчитать, сколько времени требуется, чтобы пройти через систему), вы можете просто отправить эту информацию с каждым элементомвместо этого.

...