我想实现我正在看的这个例子取自类型安全激活器(spray actor-per-request)
class RestRouting extends HttpService with Actor with PerRequestCreator {
implicit def actorRefFactory: ActorContext = context
def receive = runRoute(route)
val petService = context.actorOf(Props[PetClient])
val ownerService = context.actorOf(Props[OwnerClient])
val route = {
get {
path("pets") {
parameters('names) { names =>
petsWithOwner {
GetPetsWithOwners(names.split(',').toList)
}
}
}
}
}
def petsWithOwner(message : RestMessage): Route =
ctx => perRequest(ctx, Props(new GetPetsWithOwnersActor(petService, ownerService)), message)
}
我想知道这是否是实现角色创建的最佳方案:
ctx => perRequest(ctx, Props(new GetPetsWithOwnersActor(petService, ownerService)), message)
因为我在akka文档中看到了关于在执行元中创建执行元的警告:
val props2 = Props(new ActorWithArgs("arg")) // careful, see below
另外,如果我们在执行元中定义执行元
val ownerService = context.actorOf(Props[OwnerClient])
如何测试它呢?
我不是在批评,我只是想学习实现的最佳实践,特别是因为我把类型安全激活器看作是教育资源。
发布于 2015-05-11 12:24:26
角色按照层次结构排列,从ActorSystem的根开始。对于大多数甚至是中等复杂的项目,所有参与者都不会在那个根上创建,但一些参与者会监督其他参与者,从而创建他们。这样的子参与者可以使用Akka TestKit进行测试,它扩展了ActorSytem,创建了一个测试ActorSystem,可以替代给定的父参与者,并提供对其子参与者的访问以进行测试。这方面的例子可以在Derek Wyatt的"Akka Concurrency“一书中找到。具体地说,这本书有一个平面模拟,其中一个平面演员创建了Pilot和CoPilot演员,并使用TestKit结合ScalaTest进行了测试,如https://github.com/danluu/akka-concurrency-wyatt/blob/master/src/test/scala/PilotsSpec.scala中所演示的那样。为此,TestKit替换了飞机,并创建了Pilot和CoPilot角色作为其子对象。这是可能的,部分原因是飞行员和CoPilot不知道是谁或什么创造了他们。有关参考,请参见平面如何在https://github.com/danluu/akka-concurrency-wyatt/blob/master/src/main/scala/Plane.scala中创建它们。整个项目都是有效的,并提供了许多使用Akka的优秀示例。它可以使用一些更新来删除弃用项,并且在使用更新版本的scala编译它时,有必要将scala.concurrent.util.duration更正为scala.concurrent.duration。
https://stackoverflow.com/questions/30156325
复制相似问题