2016-08-05 25 views
0

Ich habe zwei Schauspieler Actor1 und actor2 in einem Projekt und registriert sie in Program.cs:Teilen Zustand zwischen verschiedenen Arten Schauspieler

ActorRuntime.RegisterActorAsync<Actor1>(); 
ActorRuntime.RegisterActorAsync<Actor2>(); 

aber in Laufzeit sehe ich, dass jeder von ihnen in separaten Schauspieler Dienstleistungen gehostet. Wenn ich einige Daten in Reliable Collections über StateManager in Actor1 speichere, ist dieser Status für Actor2 nicht verfügbar.

Ist es möglich, den Status zwischen verschiedenen Akteurentypen zu teilen?

Antwort

2

Zunächst sieht es so aus, als würden Sie Schauspieler auf falsche Weise benutzen. Sie sollten einen Akteurstyp pro Hostprozess registrieren. Zum Beispiel

ActorRuntime.RegisterActorAsync<Actor1>((context, actorType) => 
        new ActorService(
         context, 
         actorType, 
         () => new Actor1())) 
.GetAwaiter() 
.GetResult(); 

Wenn Sie die Kommunikation zwischen den Akteuren wollen, müssen Sie Schauspieler Instanz und rufen eine Methode auf seine Schnittstelle zum Speichern von Daten erstellen. Wenn Sie dieselben Daten in einem anderen Akteur speichern möchten, müssen Sie eine weitere Instanz erstellen. Actros von Design sind einzigartige, separate Einheiten. Sie können es von einem Ort aus tun und zwei Akteure erstellen und die Daten separat speichern, oder Sie können den zweiten Akteur von Anfang an erstellen. Zum Beispiel

var actor1Proxy = ActorProxy.Create<IActor1>(actorId, new Uri("fabric:/MyApp/Actor1")); 
var actor2Proxy = ActorProxy.Create<IActor2>(actorId, new Uri("fabric:/MyApp/Actor2")); 

actor1Proxy.SaveData(data); 
actor2Proxy.SaveData(data); 

Wahrscheinlich benötigen Sie einen zuverlässigen Dienst, um Ihre Daten zu speichern. Weitere Informationen zur Verwendung von Aktoren finden Sie in den Artikeln this und this.

+0

Ja im Allgemeinen sollten Sie Akteure in verschiedenen Prozessen hosten, wie Sie eine unabhängig voneinander aktualisieren können. Sie können jedoch mehrere Akteurentypen in demselben Prozess hosten. –

+0

@ VipulM-MSFT ja, wir haben sogar [eine Antwort] (http://stackoverflow.com/a/38732867/2152061) darüber. – cassandrad