动态更改Akka Streams上的节流级别

时间:2018-11-22 13:47:39

标签: java scala akka akka-stream

是否有任何方法可以动态地更改Source的节流参数,以实现加速机制,例如,每隔一秒钟就要减少/增加节流?

1 个答案:

答案 0 :(得分:1)

Akka throttle函数可根据成本计算油门。 我们可以使用它来动态更改节流率。

示例:

private val weight = new AtomicInteger(1)

Source(1 to 1000)
  .throttle(1000, 1.second, _ => 1000 / weight.get())
  .runWith(Sink.foreach(println))

while (true) {
  val newWeight = StdIn.readLine().toInt
  weight.set(newWeight)
}

初始节流速率为1 / s。然后我们可以通过改变重量来改变它。 由于costFunction返回整数,我使用了系数1000。 可以增加它以获得更好的粒度。

如果您想根据经过时间来改变节流,则只需随着时间的流逝而改变重量。