Ich habe folgende Treiber/Hauptklasse mein Akka Programm Einkapseln:Akka: Kommunikation außerhalb des Akteursystems?
// 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
}
}
und die folgenden ChickenCluckDetector
Schauspieler:
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?
}
}
}
das Problem bei der Hand ist also, wie man sicher/richtig die Cluck
Nachricht übergeben zu FizzBuzz#onCluck(Cluck)
, die lebt außerhalb das Aktorsystem? ich könnte bietet einen FizzBuzz
Bezug auf ChickenCluckDetector
wie so:
class ChickenCluckDetector extends UntypedActor {
FizzBuzz fizzBuzz
@Override
void onReceive(Object message) {
if(message instanceof Cluck) {
Cluck cluck = message as Cluck
fizzBuzz.onCluck(cluck)
}
}
}
Aber ich habe das Gefühl, das Akka Best Practices verletzt und konnte alle Art von Concurrency-basierten Problemen verursachen, besonders wenn es nur ein FizzBuzz
(die es gibt) Nicht-Schauspieler/Fahrer und zehntausend ChickenCluckDetector
Schauspieler. Ideen?
Dank @Quizzie (+1) - für die Prämie, würde es Ihnen etwas ausmachen Hinzufügen eines Code/Pseudo-Code-Beispiel? Meinst du eine "ChickenCluckDetector" Elterninstanz, die irgendwie die anderen Instanzen verwaltet, oder einen völlig separaten "ChickenCluckDetectorMaster" Schauspieler, und wenn ja, wie würde es aussehen? Danke noch einmal! – smeeb
In Akka ist es immer eine gute Idee, eine Hierarchie einzuführen, in der Eltern ihre Kinder beaufsichtigen, Arbeit geben, Arbeitsergebnisse sammeln, entscheiden, was mit ihnen passiert, wenn sie zusammenbrechen ... – Quizzie
Nochmals vielen Dank @Quzzzy (+1) - * * letzte ** Folgefrage, das verspreche ich! Sie scheinen darauf hinzuweisen, dass es in Ihrem Codebeispiel oben eine Akteurhierarchie gibt, in der 'ChickenCluckMaster'' ChickenCluckDetector'-Instanzen überwacht ... ** wo im Code ist das "Supervision" passiert? ** Wird es irgendwie unter der gehandhabt? Kapuze, wenn das Kind ('Props.create (...)') erstellt wird? Wie bindet sich das in die "OneForOneStrategy" und "AllForOneStrategy", von denen ich immer wieder höre? Danke noch einmal! – smeeb