Scala 如何实现Akka演员工厂?

Scala 如何实现Akka演员工厂?,scala,akka,Scala,Akka,假设我有DAO参与者(CassDaoActor、VerticaDaoActor等)响应消息“Read” 首先,有没有一种方法可以表达一个接口或抽象类来定义扩展参与者应该实现的消息“Read” 现在假设只有在运行时,我才能知道需要根据配置的数据库创建哪个参与者。例如,如果配置的db是cassandra,我需要创建CassDaoActor等。这显然是我们所知道的工厂方法模式的典型用例。我想了解我们如何实施这样的事情?显然,我们不能传递“上下文”,因为它将内容释放到参与者范围之外 请建议 到目前为止,

假设我有DAO参与者(CassDaoActor、VerticaDaoActor等)响应消息“Read”

首先,有没有一种方法可以表达一个接口或抽象类来定义扩展参与者应该实现的消息“Read”

现在假设只有在运行时,我才能知道需要根据配置的数据库创建哪个参与者。例如,如果配置的db是cassandra,我需要创建CassDaoActor等。这显然是我们所知道的工厂方法模式的典型用例。我想了解我们如何实施这样的事情?显然,我们不能传递“上下文”,因为它将内容释放到参与者范围之外

请建议

到目前为止,我尝试的是根据配置的db将各自的道具返回给需要在其中创建这些演员的演员

object`package`{
val CASS=“CASS”
val VERTICA=“VERTICA”
def getDAOProps(db:String):Props=db match{
case CASS=>CassDaoActor.props
case VERTICA=>verticadoactor.props
}
}
//监督员
val db=configuredDb()
context.actorOf(getDAOProps(db),db)

除非您需要在数据库操作上保持全局秩序,否则我不会采用这种方法,因为消息是由参与者依次处理的。显然,我没有正确地传达用例。因此,用例是从appConf文件中读取配置了哪些数据库,然后提供相应的参与者。此行为是动态的,即可以动态配置和取消配置dbs。该应用程序负责取消演员对未设置的dbs的设置。因此,在任何时候,不需要的参与者都会保持活动状态,但如果配置了新的db,则会出现相应的参与者。此外,除非为参与者实现工厂方法模式是反模式,什么是实现这一目标的合适方法是我感兴趣的。到目前为止,我在Akka写了一个小博客,以我的理解解决了这个问题:除非您需要在数据库操作上保持全局秩序,否则我不会采用这种方法,因为消息是由参与者按顺序处理的,一个接一个。很明显,我没有正确地传达用例。因此,用例是从appConf文件中读取配置了哪些数据库,然后提供相应的参与者。此行为是动态的,即可以动态配置和取消配置dbs。该应用程序负责取消演员对未设置的dbs的设置。因此,在任何时候,不需要的参与者都会保持活动状态,但如果配置了新的db,则会出现相应的参与者。此外,除非为参与者实现工厂方法模式是反模式,什么是实现这一目标的合适方法是我感兴趣的。我已经在阿克卡写了一个小博客,以我目前的理解解决了这个问题: