Ошибка при преобразовании будущего Akka в будущее Twitter с помощью биекции - PullRequest
0 голосов
/ 13 июля 2020

Я использовал библиотеку Twitter Bijection для преобразования Akka Future в Twitter Future, чтобы я мог использовать богатую библиотеку, которую поддерживает Twitter future.

Моя функция выглядит примерно так:

import scala.concurrent.{Await, ExecutionContext, Future}
import com.twitter.util.{Await, Future, Duration}
import com.twitter.bijection.Conversion.asMethod

 def blockingAskWithRetry(receivers: ArrayBuffer[ActorRef], message: Any, maxAttempts: Int)(implicit timeout: Timeout): Any = {
    var futures: ArrayBuffer[com.twitter.util.Future[Any]] = new ArrayBuffer[com.twitter.util.Future[Any]]()

    receivers.foreach(receiver => {
      futures.append((receiver ? message).as[com.twitter.util.Future[Any]])
    })

    // I haven't used maxAttempts and timeout params as of now
    com.twitter.util.Await.all(futures: _*)
  }

Я получаю следующую ошибку:

[error] could not find implicit value for parameter conv: com.twitter.bijection.Conversion[scala.concurrent.Future[Any],com.twitter.util.Future[Any]]

[error] futures.append((receiver ? message).as[com.twitter.util.Future[Any]])
[error]                                       ^

Может ли кто-нибудь помочь мне исправить это?

1 Ответ

2 голосов
/ 13 июля 2020

В вашем коде отсутствует неявная биекция между Scala Future и Twitter Future, которую можно импортировать (перенести в неявную область видимости) из библиотеки Twitter bijection-util:

import com.twitter.bijection.twitter_util.UtilBijections.twitter2ScalaFuture

Также , чтобы все работало, вам необходимо импортировать неявный контекст выполнения или использовать его как неявный параметр в вашем методе.

...