0

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

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 密集型工作应该在哪里完成?

4

0 回答 0