我使用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] ^有人能帮我解决这个问题吗?
发布于 2020-07-13 18:47:29
你的代码缺少Scala Future和Twitter Future之间的隐式双射,它可以从推特bijection-util库中导入(引入隐式范围):
import com.twitter.bijection.twitter_util.UtilBijections.twitter2ScalaFuture
此外,为了让一切正常工作,您需要导入隐式执行上下文或将其作为隐式参数放入您的方法中。
https://stackoverflow.com/questions/62868241
复制相似问题