2014-04-04 68 views
1

我用阿卡創建一個主管:如何從主管更新兒童演員的屬性?

mySupervisor = actorSys.actorOf(Props.create(MyActor.class, MyProperties())); 

class MyProperties(){ 

    String param1; 
    String param2; 

    //param1 & param2 are set in a configuration file 
} 

創建以來從ActorSystem上司是昂貴的,我只是在做一次。我正在使用MyProperties類以便 訪問actor中所需的各種參數。我不想將演員設定的邏輯添加到演員身上,因此演員 幾乎沒有工作要做,而且通常這些演職人員不會改變。但是,當屬性確實發生變化時,我該如何更新 主管的小孩演員?我不認爲我可以更改mySupervisor的狀態(因爲不可變),所以這意味着我需要創建一個新的屬性配置爲 的主管?

回答

4

你應該永遠永遠永遠永遠永遠改變一個演員的狀態與任何除了發送到演員的消息。

如果需要改變一個孩子的演員的屬性,您可以:

  • 殺演員和創建具有新特性的替代
  • 將消息發送給演員具有新特性

另外,發送給演員的消息應該是不可變的(final String param1)。如果你需要訪問一個actor的內部狀態,你應該向這個actor發送一個消息,然後讓這個actor以任何(不可變的)狀態回覆這個請求。

+0

您可以展開「發送消息給具有新屬性的參與者」此消息可以是任何類型。例如MyProperties?如果一個actor被髮送了一個帶有屬性的消息,那麼這並不意味着它的狀態需要更新才能使用新的屬性,或者僅僅是由主管創建的新參與者利用新的屬性並且現有的參與者不能被更新? –

+1

這取決於你。你可以發送一個MyProperties實例給actor。如果你只想改變現有的演員的狀態,那麼做。演員的*內部*狀態完全取決於你,只要這種修改只能通過消息傳遞完成,就可以安全地進行修改。 – Ryan