2012-07-01 2 views
7

Akka Framework empfiehlt die Verwendung typisierten Actor nur für die Interaktion mit externem Code. Standardakteure von akka sind jedoch nicht typisiert. Gibt es eine bessere Möglichkeit, typsichere Akteure zu erstellen? Gibt es noch andere Actor-Frameworks oder sichere Wrapper um akka?Getippte Nachrichten in akka

+0

Welche Probleme wollen Sie lösen? –

+2

@ViktorKlang Ich möchte sicher sein, dass nur korrekte Nachrichten an meine Schauspieler gesendet werden. –

+0

Sie können http://stackoverflow.com/a/5551034/734191 überprüfen, wo Viktor weitere Erklärungen gibt (z. B. 'werden'). – Hbf

Antwort

5

Wenn Sie wirklich wollen Schauspieler mit statischen Typisierung, dann können Sie auch voran gehen und typisierte Akteure in Ihrem Code verwenden. Dies wird aus verschiedenen Gründen dringend empfohlen.

1.) Sie laufen Gefahr, dass Ihr System zu einer Reihe von RPCs degeneriert. Die Empfangsmethode eines Akteurs macht es ziemlich offensichtlich, dass es sich bei der ganzen Sache um die Weitergabe von Nachrichten handelt, ganz zu schweigen davon, dass Sie nur Methoden für einen typisierten Akteur aufrufen.

2.) Ein Schauspieler hat wirklich keinen Typ. Während der Ausführung können sich die Nachrichten, die ein Akteur verarbeiten kann, ändern, je nachdem, in welchem ​​Status er sich befindet, und was er mit diesen Nachrichten tut. Dies ist eine hervorragende Möglichkeit, eine Vielzahl von Protokollen zu modellieren, und Akka-Akteure haben erstklassige Unterstützung dafür mit FSMs.

Also, wenn Sie es wirklich tun wollen, sind Sie frei getippt Schauspieler überall verwendet und es wird funktionieren, aber Sie sollten wirklich überlegen, über das Problem, das Sie, bevor Sie zu lösen sind versuchen so.

0

Warum ist das ein Problem für Sie? akka.actor.Actor hat die Empfangsmethode vom Typ PartialFunction, die nur für Nachrichten aufgerufen wird, die es verarbeiten kann. Warum benötigen Sie Kompilierzeitprüfungen? Aber um Ihre Frage zu beantworten: Ein Weg wäre - für eine externe API - einen Wrapper um Ihre ActorRef aufzubauen, der dann die Nachrichten an den Aktor sendet.

+4

Ja, ich möchte Kompilierzeitüberprüfungen durchführen lassen. –

+0

Meine Frage war nicht, wenn Sie Kompilierzeitprüfungen benötigen, aber warum? – drexin

+7

weil ich so früh wie möglich auf Fehler achten möchte –

1

Zur Überprüfung der Kompilierzeit siehe SynapseGrid Framework. Es definiert einen SystemBuilder, der die DataFlow-Topologie erstellt. Bei der Konstruktion ist sichergestellt, dass überprüfte Typen überprüft werden. Dann wird das resultierende System in RuntimeSystem mit verschachtelten und ordnungsgemäß verbundenen Akteuren umgewandelt.

0

Dinge recht schnell gehen, dachte ich über eine Update 1. typisierten Schauspieler deprecated 2. Statt ein neues Konzept der Akka Typed gibt an der momemnt dies die verstanden

Als ich devloped werden soll endgültige Lösung für ein typisiertes Akteursystem. Da dies aber für Akka 2.4 mindestens der dritte Versuch ist und frühestens geplant ist, bleibt dieser Anspruch noch zu beweisen.

Ich persönlich freuen uns beide Systeme zur Verfügung zu haben: die bestehende für dynamischere Anwendungsfälle, die neue für robustere diejenigen