提供一些初始显示排队

时间:2017-12-05 22:58:38

标签: scala playframework akka akka-stream playframework-2.5

我希望在一些初始延迟说10秒之后对在加载请求中发送的字符串进行排队。

如果后续请求是以一些短的间隔延迟(1秒)进行的,那么一切正常,但如果它是从脚本连续创建的那么没有延迟。

以下是示例代码。

 def load(randomStr :String) = Action { implicit request =>

  Source.single(randomStr)
    .delay(10 seconds, DelayOverflowStrategy.backpressure)
    .map(x =>{
    println(x)
    queue.offer(x)

  })
    .runWith(Sink.ignore)

  Ok("")
}

1 个答案:

答案 0 :(得分:0)

我不完全确定这是做你想做的事的正确方法。您需要重新考虑一些事项:

  1. 延迟源的初始缓冲容量为16个元素。您可以使用addAttributes(initialBuffer)

  2. 增加此值
  3. 在您的情况下,缓冲区实际上不会变满,因为每次只提供一个元素。

  4. 谁是行动的来电者?您正在定义DelayOverflowStrategy.backpressure策略,但调用者是否能够处理此问题?

  5. 在每次调用动作时,您正在创建一个由一个元素组成的Stream,这里的背压如何帮助?它应用于流处理而不是提供到队列