我有一個使用scala運行的akka actor系統。現在我需要並行配置多個設備,因此我有一個Manager
actor來管理所有這些配置任務。要實際配置它們,他將爲每個配置產生一個Worker
角色,以便它們同時運行或並行運行。現在,Worker
演員在配置期間並不需要接收來自管理員的消息,他只需要做他的事情,然後報告他已完成回到Manager
。演員的良好做法?
現在的問題是我經過的說明和Manager
在Worker
的構造函數的ActorRef
或做我創建它,然後將其發送的消息像Do(action: => Unit)
,然後在完成後將回復sender
?有沒有一個會議如何做到這一點或被認爲是一種良好的做法?
編輯:作爲弗拉基米爾Matveev讓我想起了參考Manager
不是因爲它是通過層次結構context.parent
已知的問題。這隻留下了如何將工作交給Worker
的問題。
如果'Manager'直接產生工作人員,則不需要將'Manager'引用傳遞給他們。工作人員可以使用'context.parent'來訪問'Manager'' ActorRef'。 –
@VladimirMatveev哦是的,這是真的。但是他們應該做的工作呢?如果我將來使用'context.scheduler.schedule ...'生成'context.parent'仍然是'Manager'?我認爲這應該是因爲它是封閉的,但我不確定這一點。 – mgttlinger
如果你在一個actor中使用'context'來產生子actor,他們將把這個actor作爲父母,而不管你在這個actor中使用'context'的位置。這非常合乎邏輯,因爲正如你所說的,'context'變量剛剛結束,但它仍然是相同的'context'。 –