2016-03-29 14 views
2

Я видел немало синтаксиса для создания актера:Различных Синтаксисов для создания Актеров в Акку

system.actorOf(Props(new A(a, b)), "name") 
    system.actorOf(Props(classOf[A], a, b), "name") 
    system.actorOf(Props[A], "name") 
    system.actorOf(A(a).props(), "name") 

Когда следует один использовать каждый из них?

Если есть больше, добавление приветствуется.

+1

Обычно помещают 'def props (a: Int, b: Int) = реквизит (новый A (a, b))' в сопутствующий объект 'A' и использовать' system. actorOf (A.props (1, 2)) '. Для получения дополнительной информации см. Http://doc.akka.io/docs/akka/2.4.1/scala/actors.html#Recommended_Practices –

ответ

1

Я предпочитаю конструкцию с объектом компаньон, как:

object MyActor { 
     def props(): Props = Props[ClientActor] 
    } 

    class MyActor extends Actor { 
    def receive: Receive = { 
     ... 
    } 
    } 

Если вам нужны некоторые параметры, поставленные на актера вы можете использовать:

object MyActorHandler { 
    def props(parameter: String, address: SocketAddress): Props = 
    Props(classOf[ClientActorHandler], parameter, address) 
} 

class MyActorHandler(parameter: String, address: SocketAddress) 
    extends Actor { 

     def receive: Receive = { 
      ... 
     } 
} 

При добавлении больше параметра конструктору Актер у вас есть все в одном месте.

Второе предложение: создать актера на context.actorOf() от руководителя. Создайте актерскую иерархию. Подробнее см. Supervision and Monitoring

+0

Также 'MyActor.props (..)' отлично играет с каркасами DI. – tariksbl