【问题标题】:Akka HTTP + actor + slick postgresqlAkka HTTP + actor + 光滑的 postgresql
【发布时间】:2017-02-17 19:03:50
【问题描述】:

我正在重新学习Scala,我想做一个系统流程如下

Routes(Akka-Http) 询问 Actor Model(Akka),然后通过 Slick Model 询问数据库。

类似

路线

path("rooms"){
  get {
    val rooms = (actorRoom ? GetRooms).mapTo[Seq[Room]] //bad code
    complete(rooms) //bad code
  }
}

演员室

def receive = {
  case GetRooms => sender() ! ModelRoom.getRooms()

光滑模型

val rooms = TableQuery[RoomTable]
def getRooms(): Future[Seq[Room]] = rooms.result

我的问题是我不确定何时解决房间问题。

我应该在演员内部做吗? (路线完成似乎没有等待)

我应该在路线内进行吗? (我该怎么做?)

这种做法是正确的,还是演员太过分了?

【问题讨论】:

    标签: scala architecture akka slick akka-http


    【解决方案1】:

    当您的数据库调用本身是异步的时,在流程中添加一个 Actor 可能很危险,因为它可能导致不可预测的结果。

    但如果你忽略了所有的不可预测性,仍然想这样做,你可以让它像这样工作,

    你的路线,

    import akka.pattern.ask
    import akka.actor.Status
    import scala.util.{Success, Failure}
    
    path("rooms"){
      get {
        val dbCallThroughActor = (actorRoom ? GetRooms).map({
          case Status.Success(seq) => seq
          case Status.Failure(ex) => throw ex
        })
        onComplete(dbCallThroughActor.mapTo[Seq[Room]]) {
          case Success(seq) => complete(seq)
          // or your can reject with your rejection handler
          case Failure(ex) => complete(ex)
        }
      }
    }
    

    你的演员,

    import context.dispatcher
    
    def receive = {
      case GetRooms =>
        ModelRoom.getRooms().pipeTo(sender())
    }
    

    你的漂亮模特,

    val rooms = TableQuery[RoomTable]
    def getRooms()(implicit ec: ExecutionContext): Future[Seq[Room]] = database.run(rooms.result)
    

    【讨论】:

    • 抱歉耽搁了。我收到此错误:[ERROR] [02/24/2017 15:21:05.210] [myapp-akka.actor.default-dispatcher-3] [akka.actor.ActorSystemImpl(myapp)] 处理请求时出错: 'Vector(Room(Some(1),desigual,123.4,564.4,false,None)) (类 scala.collection.immutable.Vector)'。完成 500 内部服务器错误响应。 dbCallThroughActor 无法解析,并且引发了 onComplete 上的失败。
    • 记录错误的堆栈跟踪。提供代码和堆栈跟踪。
    猜你喜欢
    • 2019-12-19
    • 2017-01-11
    • 1970-01-01
    • 2023-04-02
    • 2019-03-04
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    相关资源
    最近更新 更多