Как замедлить производителя в Akka-Streams

Я пытаюсь решить проблему с потоками akka. Я хочу, чтобы мой первоначальный производитель постоянно извлекал коллекцию очереди/mongodb и делал это в течение настроенного интервала. Какова обычная практика для ее реализации?


person λ Allquantor λ    schedule 20.05.2016    source источник
comment
Изменить: кажется, что Source.tick является законным методом решения этой проблемы. Это позволяет периодически подавать ввод с использованием заданного интервала. Его можно найти в: akka.stream.scaladsl.Source.tick(..)   -  person λ Allquantor λ    schedule 20.05.2016


Ответы (2)


Вы имеете в виду через фиксированный интервал времени?

Начать с Source.tick(...).map(loadFromMongo)?

Добавьте объединение, которое отбрасывает галочки чтобы предотвратить запросы к БД чаще, чем может обработать нисходящий поток, если это то, что вы хотите.

person Rüdiger Klaehn    schedule 20.05.2016

Кроме того, существует понятие, называемое дроссельной заслонкой. Его можно использовать следующим образом:

Source(...).throttle(50, 1.second, 1, ThrottleMode.Shaping)

Это позволяет вам указать интервал выборки, например, выше 50 элементов в секунду. Пример можно найти в документации здесь: http://doc.akka.io/docs/akka/current/scala/stream/stream-quickstart.html#Time-Based_Processing

person λ Allquantor λ    schedule 06.06.2016