scala - 如何实现 Akka 演员工厂?
问题描述
假设我有响应消息“读取”的 DAO Actor(CassDaoActor、VerticaDaoActor 等)。
首先,有没有办法表达一个接口或抽象类来定义扩展参与者应该实现的消息“读取”?
现在假设只有在运行时我才能知道需要根据配置的数据库创建哪个 Actor。例如,如果配置的数据库是 cassandra,我需要创建 CassDaoActor 等。这显然是我们所知道的工厂方法模式的典型用例。我想了解我们如何实现这样的事情?显然我们不能传递“上下文”,因为它会丢失参与者范围之外的内容。
请建议。
到目前为止,我尝试的是,我将基于配置的数据库的相应道具返回给我需要在其中创建这些演员的演员。
object `package` {
val CASS = "cass"
val VERTICA = "vertica"
def getDAOProps(db: String): Props = db match {
case CASS => CassDaoActor.props
case VERTICA => VerticaDaoActor.props
}
}
// SupervisorActor
val db = configuredDb()
context.actorOf(getDAOProps(db), db)
解决方案
推荐阅读
- javascript - Selenium (Java):从禁用的输入文本字段中检索值
- c++ - fprintf 在特定字符串上失败,而 shell 函数使用它没有崩溃
- angularjs - 引导程序在角度不起作用
- qt - Qt MVC 模式和 std::string
- javascript - D3 图表值未分组(来自 JSON 加载)
- r - 想要使用 R 在列中组合日期和时间
- jqgrid - 使用多个“and”和“or”条件过滤 jqgrid
- python - 使用自定义大小的间隔和聚合函数连接两个 pandas 数据框
- jquery - Backbone JS 滚动事件处理
- html - 当到达浏览器的顶部边缘时,粘性左侧边栏收缩和右侧栏展开