gpt4 book ai didi

使用 akka-http 的 Scala future

转载 作者:行者123 更新时间:2023-12-01 09:13:45 26 4
gpt4 key购买 nike

我需要使用 akka-http 和reactivemongo 编写简单的Web 服务。

保存数据的函数如下所示

 def saveRoute(route: Route):Future[WriteResult] = {
collection.insert(route)
}

调用此函数的代码如下所示
val userRoutes = {
logRequestResult("akka-http-microservice") {
path("routes") {
(post & entity(as[Route])) { route =>
Database.saveRoute(route)
}
}
}
}

我需要使用插入的 Route ID 返回结果,并在不让线程等待的情况下执行此操作。
如果尝试
Database.saveRoute(route).onComplete{
case Success(r) => complete(r.toString)
case Failure(e) => complete(e.getMessage)
}

它无法编译,因为它不返回值。
我知道如何以肮脏的方式制作,但真的想以适当的方式制作。

在这种情况下应该怎么做?

最佳答案

使用 onSuccess处理 future 完成时的有效响应和 handleExceptions将来不成功的时候去处理。

   val userRoutes = {
handleExceptions(mongoDbExceptionHandler) {
logRequestResult("akka-http-microservice") {
path("routes") {
(post & entity(as[Route])) { route =>
onSuccess(Database.saveRoute(route)) { result =>
complete(result)
}
}
}
}
}
}

// Something like this for whatever the exceptions you expect are
val mongoDbExceptionHandler = ExceptionHandler {
case ex: MongoDbReadException => complete(HttpResponse(InternalServerError, "No database")))
}

成功:
http://doc.akka.io/docs/akka/2.4.9/scala/http/routing-dsl/directives/future-directives/onSuccess.html

处理异常:
http://doc.akka.io/docs/akka/2.4.9/scala/http/routing-dsl/exception-handling.html

关于使用 akka-http 的 Scala future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com