gpt4 book ai didi

mysql - 在 akka actor 消息中传递 scala slick table

转载 作者:行者123 更新时间:2023-11-29 03:33:38 30 4
gpt4 key购买 nike

我想发送 slick table 作为 akka actor 消息的一部分。这样另一端的remote actor就可以连接到数据库,并且可以对mysql数据库进行CRUD操作。我无法理解光滑的类型,我发现编译器/eclipse 提示。我怎样才能完成这个。将巧妙的查询作为 Actor 消息的一部分传递是个好主意吗?

object RemoteActorMessages {
case class Create(table: Table[A])
case class RunQuery(query: Query[_, _, _])
case Result(code: Int, message: String)
}

class DBActor extends Actor {
def recieve = {
case Create(table) => createTable(table)
case RunQuery(query) => runQuery(query)
case ... //so on
}
}

def createTable(table: Table[M]): Future[A] = Future {
db.withSession(implicit session => tableQuery[table].ddl.create)
}

def runQuery(query: Query[_, _, _]): Future[A] = Future {
db.withSession { implicit session => {
query.run
}
}
}

警告:代码可能有一些类型错误。感谢观众谨慎行事

我对如何将结果发送回消息的发送者感到困惑。例如:query.list.run 返回模型对象列表。那么,我应该如何通过结果消息来构建

最佳答案

我认为这是“当你有了锤子,一切都会变成钉子”的情况。我认为这不是 Actor 的正确用例。一个原因(不是唯一的)是数据库操作“缓慢”并且它们会长时间阻塞参与者线程。

可以说您想要一个管理表操作的服务,使用 Futures 和自定义执行上下文来隔离影响(例如,在 Play 中完成 like this )。像这样的东西:

object DBService {
def createTable() : Future[Boolean] = ???
...
}

Actor 应该只接收像 CreateTable 这样的命令,然后调用服务中的相应方法。

顺便说一下,这会简化您的用例,因为服务可以更多地了解表和其他 Slick 细节,而参与者不会注意到它们。

不是唯一的方法,但可以说更简单。

关于mysql - 在 akka actor 消息中传递 scala slick table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26843181/

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