2015-05-10 2 views
1

Я хочу осуществить Я смотрел на этот пример взят из типизированного активатора (спрей-актер-за запроса)Лучшая практика создания актер по запросу

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) 
} 

и мне интересно, если это лучший parctice для реализации создание актеров:

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]) 

как она может быть проверена?

Просто, чтобы сделать вещи ясно - я не критикую, я просто пытаюсь узнать лучшие практики реализации специально, как я вижу типизированный активатор в качестве образовательного источника

+1

Вы можете создать своего актера в сопутствующем объекте, который гарантирует, что вы никогда не закроете любое состояние вашего родительского актера. –

ответ

0

Актеров расположены в hieararchy начиная от корня системы Actor. Для большинства даже умеренно сложных проектов все участники не будут созданы в этом корне, но некоторые участники будут контролировать других и, следовательно, создавать их. Такие дочерние субъекты могут быть протестированы с помощью Akka TestKit, который расширяет ActorSytem для создания тестовой системы ActorSystem, которая может заменить данного родительского актера и обеспечивает доступ к своим детям для тестирования. Примеры этого можно найти в книге «Акка-параллелизм» Дерека Уайта. В частности, эта книга имеет плоскостное моделирование, в котором актер Plane создает участников Pilot и CoPilot, которые тестируются с TestKit в сочетании с ScalaTest, как показано в https://github.com/danluu/akka-concurrency-wyatt/blob/master/src/test/scala/PilotsSpec.scala. Для этого TestKit заменяет плоскость и создает роли Pilot и CoPilot в качестве своих детей. Это возможно отчасти потому, что Pilot и CoPilot не знают, кто и что их создает. Для справки см., Как Plane создает их в https://github.com/danluu/akka-concurrency-wyatt/blob/master/src/main/scala/Plane.scala. Весь этот проект работает и предоставляет ряд отличных примеров использования Akka. Он может использовать некоторое обновление для удаления устареваний, и при компиляции его с более поздними версиями scala необходимо исправить файл scala.concurrent.util.duration до scala.concurrent.duration.

Смежные вопросы