Scala 我如何创建一个;定位器;阿克卡演员
我是一个akka新手,我正在尝试构建一个由Spray和akka组成的应用程序。作为应用程序的一部分,我想给我的开发伙伴(他们也是akka的新手)一些预先打包的参与者,他们可以做一些特定的事情,然后将这些事情“附加”到他们的参与者系统上 具体而言: 有没有推荐的方法来提供“actor locator”/“actor System locator”--考虑像API这样的服务定位器来查找并向actor发送消息?换句话说,我如何实现以下功能:Scala 我如何创建一个;定位器;阿克卡演员,scala,akka,Scala,Akka,我是一个akka新手,我正在尝试构建一个由Spray和akka组成的应用程序。作为应用程序的一部分,我想给我的开发伙伴(他们也是akka的新手)一些预先打包的参与者,他们可以做一些特定的事情,然后将这些事情“附加”到他们的参与者系统上 具体而言: 有没有推荐的方法来提供“actor locator”/“actor System locator”--考虑像API这样的服务定位器来查找并向actor发送消息?换句话说,我如何实现以下功能: ActorLocator.GoogleLocationAPI
ActorLocator.GoogleLocationAPIActor
这样我就可以像这样使用它:
ActorLocator.GoogleLocationAPIActor!“街道地址”
假设getGoogleLocationAPIActor返回一个ActorRef,该ActorRef接受作为地址的字符串,并向google发出HTTP调用以将其解析为lat/lon
我可以在内部使用actorSelection,但是:
object MyStage{
val system:ActorSystem = ActorSystem("my-stage")
}
然后
这种方法似乎类似于,但我不太确定这是否是一件好事。我担心的是,这个体系似乎过于开放,任何人都无法在没有任何监督的情况下将孩子加入其中,这似乎有点丑陋
我的要求是合理的还是我的想法是错误的
我们如何“建立”一个角色库,以便在应用程序之间重用 既然这是关于设计一个API的,那么你就非常接近舆论领域了,但不管怎样,下面是我想要构建这个API的方式。就我个人而言,我对全球单身人士非常敏感,因此: 因为ActorLocator是一个服务,所以我将它组织为一个
Trait
:
trait ActorLocator {
def GoogleLocationAPIActor: ActorRef
def SomeOtherAPIActor: ActorRef
}
然后,您可以实现该服务,例如:
class ActorLocatorLocalImpl(system: ActorSystem) extends ActorLocator {
override lazy val GoogleLocationAPIActor: ActorRef =
system.actorOf(Props[GoogleLocationAPI])
//etc
}
和工厂对象:
object ActorLocator {
def local(system: ActorSystem): ActorLocator =
new ActorLocatorLocalImpl(system)
}
如果您需要创建更复杂的服务实现和更复杂的工厂方法,那么用户在构建了服务之后,仍然只需处理
Trait
的接口,很抱歉延迟了回复,但是是的,这非常优雅!
object ActorLocator {
def local(system: ActorSystem): ActorLocator =
new ActorLocatorLocalImpl(system)
}