Имеет два входных потока, каждый из которых создает экземпляры объектов, определенные как
case class ReplayData(timestamp:Long, payload:Any)
Поток 1
1, полезная нагрузка1
1000, полезная нагрузка3
Поток 2
400, полезная нагрузка2
1500, полезная нагрузка4
Я хотел бы реализовать механизм воспроизведения, который
будет выдвигать элементы вниз по потоку, упорядоченные по временной метке, которую я имею на каждом элементе
Он будет имитировать живые сценарии с производства.
Этот механизм должен подчиняться задержкам между сообщениями , например. первое отправленное сообщение - это payload1 (его начальная точка), payload2 из Stream2 должно быть отправлено через 400 мс (разница между отметкой времени следующего сообщения и отметкой времени исходного сообщения) и т. д.
Я могу сделать это довольно легко, используя DelayedQueue , использование которого объясняется в этой SO теме
Неограниченная очередь блокировки отложенных элементов, в которой элемент
может быть принято только после истечения срока его задержки.
Главой очереди является тот элемент Delayed, задержка которого истекла
самый дальний в прошлом. Если нет задержки, нет головы и
опрос вернет ноль.
Истечение срока действия происходит, когда элемент getDelay (TimeUnit.NANOSECONDS)
Метод возвращает значение, меньшее или равное нулю. Даже если
Неиспользованные элементы не могут быть удалены с помощью take или poll, они
иначе рассматривается как нормальные элементы.
Например, метод size возвращает счетчик как истекших, так и
неистекшие элементы. Эта очередь не разрешает нулевые элементы. делает
не разрешать нулевые элементы.
Я пытаюсь понять, как это сделать в потоках Акка, но не могу найти то, что решило бы эту проблему для меня.
Я рассматривал mergeSorted как способ объединения двух потоков и упорядочения их по какой-либо функции.
И, похоже, более или менее подходит для этой цели упорядочения на основе какой-то пользовательской функции.
Я не уверен, как обрабатывать задержки между элементами на основе свойства timestamp .
Используя простой старый AKKA, я могу использовать планировщик для чтения данных, упорядочивать их и планировать каждый элемент для отправки, когда пройдет время.