在scala中异步REST调用

时间:2018-07-26 15:21:43

标签: scala rest http asynchronous

我正在使用scalaj库(当前是同步的)来在while循环中反复对SAME端点进行REST调用(同时使用从上次调用获得的数据来更新下一个调用的参数 ,就像每次偏移一样,每次都获取不同批次的数据)。当前,每个呼叫大约需要6-7秒才能返回。

是否可以使用带有或不带有scalaj的异步技术来加快此过程?自从我使用Spark Streaming以来,我一直想要一个恒定的数据流。但是由于我需要上一个呼叫的数据才能进行下一个呼叫,因此如何使它工作?

其他详细信息: 前述的while循环位于扩展Runnable的线程中, 并且该线程是通过Executors.newFixedThreadPool()

提交的

1 个答案:

答案 0 :(得分:0)

异步并不能使任何事情变得更快,它只是...好...异步,因此,在长时间运行的任务正在进行时,您可以执行其他操作。但是,如果您需要做的一切都取决于任务的结果,则并行化没有任何意义,因为无论如何,您都必须等待任务完成。

如果处理结果需要花费相当长的时间,则可以使用以下类似的方法同时进行

def processBatch(batch: Batch): Future[Unit] {
  val nextBatch = Future(getNextBatch(batch))
  // do processing of the current batch
  nextBatch.flatMap { 
    case NoMoreResults => Future.successful(())
    case newBatch => processBatch(newBatch)
  }
}
相关问题