将番石榴期货转换为Twitter期货

时间:2018-11-01 04:52:22

标签: scala guava finagle finatra

我有一个Finatra应用程序,该应用程序使用产生Guava Futures的Datastax驱动程序访问Cassandra。通过以下代码完成转换

import com.google.common.util.concurrent.{FutureCallback, Futures, ListenableFuture}
import com.twitter.util.{Future, Promise}

implicit def toTwitterFuture[A](f: ListenableFuture[A]): Future[A] = {
  val p = Promise[A]()

  val callback = new FutureCallback[A] {
    override def onSuccess(result: A): Unit = p.setValue(result)

    override def onFailure(t: Throwable): Unit = p.setException(t)
  }

  Futures.addCallback(f, callback)
  p
}

问题是,此转换之后,其余请求处理将在由Cassandra驱动程序创建的线程池中进行,这可能会阻塞其他I / O任务。我该如何访问Finagle的执行程序,以执行此类CPU密集型工作?

0 个答案:

没有答案