/groovy/akka/akka-http/sliding_window/sample.groovy

https://github.com/fits/try_samples · Groovy · 53 lines · 42 code · 11 blank · 0 comment · 0 complexity · 11d263267056dce7301b0b8a5768203c MD5 · raw file

  1. @Grab('com.typesafe.akka:akka-http_2.12:10.0.10')
  2. import static akka.http.javadsl.server.Directives.*
  3. import akka.actor.ActorSystem
  4. import akka.actor.ActorRef
  5. import akka.http.javadsl.Http
  6. import akka.http.javadsl.ConnectHttp
  7. import akka.stream.ActorMaterializer
  8. import akka.stream.OverflowStrategy
  9. import akka.stream.javadsl.Source
  10. import akka.stream.javadsl.Sink
  11. import scala.concurrent.duration.Duration
  12. import java.util.concurrent.TimeUnit
  13. def system = ActorSystem.create()
  14. def mat = ActorMaterializer.create(system)
  15. def http = Http.get(system)
  16. def createRoute = {
  17. def actor = Source.actorRef(5, OverflowStrategy.fail())
  18. .groupedWithin(10, Duration.create(5, TimeUnit.SECONDS))
  19. .to(Sink.foreach { println it })
  20. .run(mat)
  21. route(
  22. path('data') {
  23. parameter('v') { v ->
  24. actor.tell(v, ActorRef.noSender())
  25. complete('ok')
  26. }
  27. }
  28. )
  29. }
  30. def handler = createRoute().flow(system, mat)
  31. def binding = http.bindAndHandle(
  32. handler,
  33. ConnectHttp.toHost('localhost', 8080),
  34. mat
  35. )
  36. println 'start ...'
  37. System.in.read()
  38. binding.thenCompose {
  39. it.unbind()
  40. }.thenAccept {
  41. system.terminate()
  42. }