[akka-stream] How to emit the newest element every n seconds?

145 views
Skip to first unread message

Dominykas Mostauskis

unread,
Jul 29, 2016, 9:57:06 AM7/29/16
to Akka User List
In Akka Stream, I'd like a stream with a timer that emits an element every n seconds. The timer should emit from a 1 element buffer that drops head on overflow (meaning only keeps the newest element). So essentially emit the newest element in intervals of n seconds. How can this be done?

My attempts could not get me further than a stream that emits the newest element with a lag of n seconds, meaning the current timer's cycle doesn't sample new elements. It looked something like `in ~> buffer.drophead ~> throttle(1 element/per second)`.

Martynas Mickevičius

unread,
Aug 5, 2016, 10:36:15 AM8/5/16
to akka...@googlegroups.com
Hi. You were quite close. Instead of buffer.drophead use conflate which is a rate detached operation. That allows upstream before conflate progress faster than downstream after the conflate.

Source
  .unfold(0) { e => Some((e + 1, e)) }
  .conflate[Int] { case (_, e) => e }
  .throttle(1, 1.second, 1, ThrottleMode.Shaping)
  .runForeach(println)

On Fri, Jul 29, 2016 at 4:27 PM, Dominykas Mostauskis <dominykas....@gmail.com> wrote:
In Akka Stream, I'd like a stream with a timer that emits an element every n seconds. The timer should emit from a 1 element buffer that drops head on overflow (meaning only keeps the newest element). So essentially emit the newest element in intervals of n seconds. How can this be done?

My attempts could not get me further than a stream that emits the newest element with a lag of n seconds, meaning the current timer's cycle doesn't sample new elements. It looked something like `in ~> buffer.drophead ~> throttle(1 element/per second)`.

--
>>>>>>>>>> Read the docs: http://akka.io/docs/
>>>>>>>>>> Check the FAQ: http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google Groups "Akka User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to akka-user+unsubscribe@googlegroups.com.
To post to this group, send email to akka...@googlegroups.com.
Visit this group at https://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages