2017-11-13 5 views
0

Angenommen, in einem bestimmten Zustand serialisiert werden, ein akka Schauspieler A schafft ein Kind Schauspieler B:Garantie, dass bestimmte Nachrichten nicht

Context.ActorOf(Props.Create(() => new BActor(RawDetails)));

RawDetails sind ein ziemlich großen, aber einfache Objekte ohne Referenzen, die sein müssen in das eigentliche Datenobjekt SmartDetails transformiert, das viele Referenzen enthält.

SmartDetails wird im Konstruktor von BActor erstellt und muss nun an Akka Schauspieler A. gesendet werden

ich die Garantie haben muss, dass SmartDetails nicht serialisiert werden, wenn es von B nach A. Senden

Ist das ist ein gültiger weg in akka?
Wir haben es getestet und es funktioniert, d.h. es ist nicht serialisiert.

Ich suche nach Dokumentation wo z. Ich kann eine Aussage finden, dass ein untergeordneter Akteur in demselben Prozess wie der übergeordnete Akteur erzeugt wird und dass Serialisierung nicht stattfinden wird. Wenn die Nachricht SmartDetails serialisiert wird, stürzt akka ab, weil SmartDetails zu groß ist.

Das Original RawDetails kam von einem anderen Akteur in serialisierter Form, und es wurde in kleinen einfachen Paketen "versandt".

Antwort

1

Standardmäßig Nachrichten innerhalb der gleichen ActorSystem (gleichen Prozess und AppDomain) sind nicht serialisiert - daher ist es so wichtig, dass sie unveränderlich sind.

Die Dokumentation erwähnt es here, unter dem "Verification" Abschnitt:

Normalerweise Nachrichten zwischen lokalen Akteuren gesendet (d.h. gleiche CLR) nicht Serialisierung durchlaufen. Zu Testzwecken kann es manchmal wünschenswert sein, die Serialisierung für alle Nachrichten (sowohl remote als auch lokal) zu erzwingen .

Aber Nachrichten an einen anderen Akteur System über Remote/Clustering serialisiert werden gesendet.

+0

Danke, das ist genau das, was ich nicht selbst finden konnte. – Gerard

+0

Kein Problem, froh zu helfen! – easuter

Verwandte Themen