java - 动态改变 Akka Streams 的节流级别

标签 java scala akka akka-stream

有什么方法可以动态更改源的节流参数以实现加速机制,例如每过一秒节流就会减少/增加?

最佳答案

Akka throttle功能提供基于成本计算 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 的因子。
可以增加它以获得更好的粒度。
如果你想根据时间改变节流,你只需要随着时间的推移改变权重。

关于java - 动态改变 Akka Streams 的节流级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53432418/

相关文章:

java - 如何使 BufferedInputStream 可序列化?

java - 使用apache solr进行特定列的数据搜索

string - Scala 中 String.format 的缩写

java - 在 java/scala 中覆盖整个类

java - akka 中的正确设计。 - 消息传递

java - 停止(getSelf())与停止(this.getSelf())

java - 尝试在 Android 中使用 AESCounterRNG

java - 无法访问对象的方法

excel - 从 Excel/VBA 调用 Scala 函数

使用 Akka 进行 Scala Testkit 单元测试