Finagle与未来的无限请求序列

时间:2016-06-23 04:09:31

标签: scala future finagle

我有一个HTTP API端点,我需要不断检查新值。幸运的是,它支持长时间的民意调查。所以我的想法是,我需要实现一个无限循环'在我做请求的地方,等待响应(最多10分钟),从响应中获取一些值并通过将它们存储在某处产生副作用,再发出请求。

鉴于我有一些功能,调用将启动此无限循环'我还需要返回一个Closable来满足Finagle API I的集成,这样就可以中断该过程。如果HTTP请求失败,我需要立即重试。

现在我需要弄清楚如何在Finagle中使用Future来实现它。我想知道我是否可以通过将转换应用于响应Future来使用递归?或者我错过了什么,并且在Finagle中有更直接的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我不确定我能想象它(你所描述的)如何比递归更简单:

  def keepCalling: Future[Unit] = makeRequest
    .flatMap { response => 
       processResponse(response)
       if(cancelled) Future.Unit else keepCalling
     }

注意,这实际上是传统意义上的递归,因为我们通常期望(有一些保留)在任何给定时间只有一个keepCalling实例在堆栈上,因为“递归”调用发生在不同的线程上。