Ho il seguente/classe principale driver di incapsulare il mio programma di Akka:Akka: comunicare al di fuori del sistema dell'attore?
// Groovy pseudo-code
class FizzBuzz {
ActorSystem actorSystem
static void main(String[] args) {
FizzBuzz d = new FizzBuzz()
d.run()
}
void run() {
Initialize initCmd = new Initialize()
MasterActor master = actorSystem.get(...)
// Tells the entire actor system to initialize itself and start doing stuff.
// ChickenCluckDetector is an actor managed/supervised by MasterActor.
master.tell(initCmd, ...)
}
// Called when a ChickenCluckDetector actor inside the actor system receives
// a 'Cluck' message.
void onChickenGoesCluck(Cluck cluck) {
// Do something
}
}
E la seguente ChickenCluckDetector
attore:
class ChickenCluckDetector extends UntypedActor {
@Override
void onReceive(Object message) {
if(message instanceof Cluck) {
Cluck cluck = message as Cluck
// Now, how to pass the message safely/properly to FizzBuzz#onCluck?
}
}
}
Quindi il problema a portata di mano è come in modo sicuro/passare correttamente il messaggio Cluck
a FizzBuzz#onCluck(Cluck)
, che vive fuori il sistema di attore? Ho potrebbe fornire un riferimento FizzBuzz
-ChickenCluckDetector
in questo modo:
class ChickenCluckDetector extends UntypedActor {
FizzBuzz fizzBuzz
@Override
void onReceive(Object message) {
if(message instanceof Cluck) {
Cluck cluck = message as Cluck
fizzBuzz.onCluck(cluck)
}
}
}
Ma ho la sensazione che questo viola le migliori pratiche di Akka e potrebbe causare ogni sorta di problemi di concorrenza a base, soprattutto se una sola FizzBuzz
c'è (che c'è) non-attore/autista e diecimila attori ChickenCluckDetector
. Idee?
Grazie @Quizzie (+1) - per la grazia, ti dispiacerebbe l'aggiunta di un esempio di codice/pseudo-codice? Intendi un'istanza genitore 'ChickenCluckDetector' che in qualche modo gestisce le altre istanze o un attore' ChickenCluckDetectorMaster' completamente separato e, in tal caso, come sarebbe? Grazie ancora! – smeeb
In Akka è sempre una buona idea introdurre la gerarchia dell'attore in cui i genitori supervisionano i loro figli, danno loro lavoro, raccolgono i risultati del loro lavoro, decidono cosa succede loro quando si schiantano ... – Quizzie
Grazie ancora @Quizzie (+1) - * * ultima domanda di followup, lo prometto! Sembra che nel tuo esempio di codice sopra, ci sia una gerarchia di attori in cui 'ChickenCluckMaster' controlla le istanze di' ChickenCluckDetector' ... ** dove nel codice sta succedendo la "supervisione"? ** È in qualche modo gestita sotto cappuccio quando creato il bambino ('Props.create (...)')? In che modo si lega a 'OneForOneStrategy' e' AllForOneStrategy'? Grazie ancora! – smeeb