首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为每个请求创建执行元的最佳实践

为每个请求创建执行元的最佳实践
EN

Stack Overflow用户
提问于 2015-05-11 04:30:16
回答 1查看 1.2K关注 0票数 1

我想实现我正在看的这个例子取自类型安全激活器(spray actor-per-request)

代码语言:javascript
运行
复制
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)
}

我想知道这是否是实现角色创建的最佳方案:

代码语言:javascript
运行
复制
ctx => perRequest(ctx, Props(new GetPetsWithOwnersActor(petService, ownerService)), message)

因为我在akka文档中看到了关于在执行元中创建执行元的警告:

代码语言:javascript
运行
复制
val props2 = Props(new ActorWithArgs("arg")) // careful, see below

另外,如果我们在执行元中定义执行元

代码语言:javascript
运行
复制
val ownerService = context.actorOf(Props[OwnerClient])

如何测试它呢?

我不是在批评,我只是想学习实现的最佳实践,特别是因为我把类型安全激活器看作是教育资源。

EN

回答 1

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30156325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档